Fix tree builder test runner
Benchmark on small input chunks
Simplify tokenizer lookahead

We no longer consume n characters and then un-consume when they fail to match.

This also means the BufferQueue doesn't need to track how many characters are
avaliable -- that was an optimization to avoid excessive thrashing.

Switch from DList to RingBuf so we can index in eat().  Benchmarks suggest
RingBuf is a little bit faster, although they were not conclusive.

Overall, this patch improves tokenizer performance by as much as 50% on some
documents.

Fixes #41.