Randomizer needs to call done
Redesign legacy formatter to accomodate core changes.

We've changed how hooks describe their source. This had consequences,
but it's meant this code has improved a lot. We no longer need a Buffer,
and can get clear signals about what to do when by passing down the
test_case / test_step events through the printers.

The state machine inside FeaturePrinter still needs some refactoring to
tidy up.