Documentation fix.
Make LRU cache serializable.
Use alias for port number type.
Allow for inspection of the last bit.
Reimplement bitmap coding.

This commit brings some architectural changes to bitmap coding. We no longer
keep a separate bitmap storage, this aspect is too specific for each coder so
that we merged the two. We also got rid of the primitive range coder, which
enumerated all bitstreams and implemented range queries as a naive bitwise
operation of all of them.

Now we have new coders which use bit slicing to control the size. Both equality
and range coders exist, as described in the paper "Bitmap Index Design and
Evaluation" by Chan and Ioannidis. We kept the binary bit-slice coder as a
separate coder because it represents a special case with optimization
opportunities. The authors also offer a query algorithm, RangeEval-Opt, which
we use to evaluate range query expressions for range-coded bitmaps.