Optimizations; another 5x faster

Before:

`test bench ... bench:     51482 ns/iter (+/- 14876)`

After:

`test bench ... bench:     10686 ns/iter (+/- 1535)`

Performance improvements achieved by minimizing copies, avoiding unnecessary
creation of intermediate DLists (e.g., prefix prepend), and skipping the DList
reversal by appending to the back of the buffer. I did not benchmark each in
isolation but I'm pretty much certain that reduced copying is the biggest win.

There's still more room for improvement, e.g., see the FIXME comments. Using
Formatter per #16 would sidestep the lifetime issues and probably be more
efficient anyway, not to mention more flexible. Another possibility would be
to explore a parallel implementation of the algorithm. We'd use Arc<_> instead
of Box<_> for representing the ADT but otherwise I'm not sure how that would
work just yet.