This is a complete reimplementation of the segmentation code, since the old
model wasn't able to cope with the recent changes. There are a couple of
problems remaining:
1. The evolver interface was designed to do incremental generation of breaks.
The new design doesn't permit that, since it implements an NFA with speculative
branches. It could be changed to do the breaks in batches when speculations
collapse into certainties, but it is certainly simpler to accept all the breaks
at once.
2. The speculative branches are somewhat wasteful: many of them have identical
prefixes, which means we're updating several branches in parallel rather than
having a shared prefix and splitting branches only when necessary. I'm working
on an optimization that will take care of this.