Implemenation of a Batcher API

This is a pass at flushing out an API and implemenation for #107.
I never intended ordering to exactly matter with batches.  There are two reasons for this.
1.  This was designed to allow for multiple producers to add data to the batches asynchronously.
2.  The batches are handed to the BatchListener asynchonously,  This means that the order that the batchlistener actually gets the batches is really bound to how the configured listening service processes runnables.

That being said, the order of the data entering the batchers should be consistent, and the data passed to the listener service should hold that ordering.  I can add a test to verify that for each of the batcher impls.