This is a reader monad for parsing bit-aligned data. The usual Get monad
handles byte aligned data well.

In this monad, the current offset into the input is a number of bits, and
fetching n bits from the current position will shift everything correctly.
Bit vectors are represented as ByteStrings here either the first n bits
are valid (left aligned) or the last n bits are (right aligned).

If one is looking to parse integers etc, right alignment is the easist to
work with, however left alignment makes more sense in some situations.