Iterable sorter

A project I'm working on is using this library (thanks, it's great!) but needs to fit it into a pull based control flow. I'd be happy to expand on the use case more if that would be helpful.

This is a fairly straight forward refactor:
- Sorter mostly becomes SorterBase
- IteratingSorter does what Sorter use to, but stops short of writing the output and instead returns an Iterator
- Sorter now extends the new class with sort() implementations that continue to write the output.

The project I'm working on can use the IteratingSorter directly in the existing pipeline and existing users of Sorter won't notice a change.

Any *extenders* of Sorter may have issue with a few signature changes. I'd be happy to go back and revert those if API compatibility is important.