Genericise Codec and have one Codec per connection

To make things more strongly typed Codec has been genericised such
that it returns an object of type T, rather than an instance of the
DecoderResult marker interface that was previously returned. This
change has been rippled out to its fullest extent: TcpConnection and
TcpServerReactor are now also genericised with the same type as the
Codec which they are using.

DecoderCallback, which previously took a DecoderResult has been
replaced with the use of a Consumer which takes the same type as the
associated Codec.

Rather than a Codec being shared across multiple connections, a
Supplier<Codec<T>> is now used. A Codec is obtained from the
supplier each time a new connection is accepted. Note that, if the
Codec is stateless, the same Codec may be returned for each call to
the Supplier. See LineFeedCodecSupplier for an example of such a
Supplier.

Closes #49