Improve shutdown of TcpClient and TcpServer

Previously, when TcpClient and TcpServer were shutdown, they would
leave threads running as neither class was correctly shutting down
Netty. This commit updates both TcpClient and TcpServer to shut down
Netty as part of their shutdown processing.

As part of this commit, the Netty dependency has been updated to
4.0.0.CR6. This is the latest 4.0.0 build available at this time.
A benefit of this upgrade is that Netty's EventLoopGroup now has
built-in support for being shutdown gracefully, making it easier
to clean up all of Netty's threads.

The Netty API has undergone some changes between 4.0.0.Alpha8 and CR6,
most notably in the handling of inbound messages: a MessageList is
now passed to a ChannelInboundHandler. A handful of updates have been
made for compatibility with the new API.

An unfortunate side-effect of the move to CR6 is the introduction of
Netty's GlobalEventExecutor. This class uses a single thread for
event execution. This thread will die after one second of having no
tasks to execute but there is no method that can be called to make
this happen quicker. This requires us to resort to sleeping for one
second during shutdown to give this thread a chance to die.

The bind and connect methods are no longer available on ChannelHandler
which broke LoggingHandler. The logging of bind and connect has been
moved to NettyTcpServer: into the bind future listener and into the
channel initializer respectively.

Completes #88