Improve TcpClient's close behaviour

There are a couple of problems with TcpClient's close behaviour that are addressed by these commits:

1. When TcpClient.close() is called, it would attempt to close all of its connections twice. This could cause exceptions to be thrown and the close processing to stall.
1. When a connection had been opened with a Reconnect instance, a reconnection attempt would be made even if the connection or the whole client was being closed. This could cause exceptions to be thrown, cluttering up the logs.