Rework the batching and related parts... STILL A WIP

- Trade buffers for non-blocking
- Introduction of a batch manager.
- Simplify the process of scaling batchers and outlets
- Possibly better distribution via the outlets (one http.Client per outlet)
- expire old batches to handle bursts
- move line formatting out of the reader(s) and into the batcher(s)
- Combine stats into a struct so there is just less to pass around.

There is now a more simple interface between batchers and outlets, which
is a trio of channels: inBatches; outBatches; returnBatches.

inBatches is used by the batchers to get a new batch from the batch
manager.
outBatches is used by the batchers to send "complete" batches to
outlets.
returnBatches is used by outlets to return batches to the batch manager.

The batch manager currently implements a non blocking (mostly) aged LIFO
list of buckets and will expire buckets that have been queued for > 1
minute. This should help handle bursts as unused buckets will age out
over time.

We could implement other batch managers using the give/return channel
set if this behaviour is not up to snuff.
it is really "tags"
Get the existing tests working
Add a DialTimeout and a ResponseTimeout
append this in case we send data more than once
make this a []byte instead
no need to wrap LineCount in a method
use range and other cleanups for batcher
Also use a range in the outlet
Run 2 batchers and 4 outlets by default