Optimizations; 18.8x faster

I renamed a few things to be a little easier to understand (based on looking at the SML version). I think the story with passing `DList` (and most of the other pointer-based containers) is basically the same as `Vec`.