Fixes #185 Adds batch semantics to the TcpConnection by having TcpConnection.out() return a BatchConsumer rather than a plain Consumer.

If calling accept(T) on the output Consumer without first calling start(), the connection will be in "autoflush" mode, which is the default behavior. That means every call to accept(T) will result in a write + flush of the underlying connection. But if start() is called first, then autoflush is set to false, which means just queue up or optimize the writes (what happens is dependent on the connection implementation) and defer the flush until end() is called.