- Improvements in buffer char<->byte mapping

  - Range table implementation - especially when there are few runs of
    different widths, e.g. recently converted from fixed-width
    optimization to variable width

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Range Tables to speed up Bufpos <-> Bytind caching
==================================================

This describes an alternative implementation using ranges.  We
maintain a range table of all spans of characters of a fixed width.
Updating this table could take time if there are a large number of
spans; but constant factors of operations should be quick.  This method really wins
when you have 8-bit buffers just converted to variable width, where
there will be few spans.  More specifically, lookup in this range
table is O(log N) and can be done with simple binary search, which is
very fast.  If we maintain the ranges using a gap array, updating this
table will be fast for local operations, which is most of the time.

We will also provide (at first, at least) a Lisp function to set the
caching mechanism explicitly - either range tables or the existing
implementation.  Eventually, we want to improve things, to the point
where we automatically pick the right caching for the situation and
have more caching schemes implemented.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  - Improvements in traditional caching algorithm, based on FSF
    implementation.