Fix problem where closing a TcpClient may timeout

Intermittently, closing a TcpClient will timeout. This will result in
await() on the close Promise blocking for the configured timeout
period.

The problem appears to be due to NettyTcpClient duplicating logic in
TcpClient that closes all of the client's TcpConnections and
performing the duplicated closes after it's initiated graceful shutdown
of the EventLoopGroup. This sets up a race between the event loop
shutting down and the connections being closed. If the EventLoopGroup
shutdown wins the race, the connection close will fail with a
RejectedExecutionException which appears to stall the shutdown of the
TcpClient such that the Promise is not fulfilled in a timely manner.

To address this problem, the duplicated close logic has been removed so
that the closing of the connections is only performed before the
EventLoopGroup has begun its shutdown processing. This should hopefully
address the problem with TcpClientTests.closingPromiseIsFulfilled()
taking 30 seconds for the close Promise's success consumer to be called.
Only reconnect when connection was dropped

Previously, no distinction was made between a connection that had
been dropped and a connection that was closed. This meant that when
a TcpConnection was closed it would attempt to reconnect. The same
was true of a TcpClient being closed: all of its TcpConnections would
attempt to connect during the close processing. This latter case
resulted in exceptions being thrown as Netty was in the process of
shutting down while the connections were being re-established.

NettyTcpConnection now keeps track of whether or not it's closing, i.e.
whether or not it's been explicitly closed rather than being dropped.
If it is closing then no attempt is made to reconnect. Similarly, 
NettyTcpClient also keeps track of whether or not it's closing. If it
is, it's connection Supplier will not attempt to create a new connection
and will return null instead.

A unit test has been added to verify that a dropped connection will
still attempt to reconnect.
Merge pull request #170 from wilkinsona/improve-close

Improve TcpClient's close behaviour