Add TCP client reconnect limiting logic

We ran into a bug in production today where haproxy had a port bound
with no backends, so it was immediately returning a null response. This
caused the client TcpTransport to get stuck in an infinite loop, since
it resets its `retry` count back to 0 after establishing a successful
connection.

Previously, if the connect was successfully opened, we considered that
as having a valid backend. However, for reasons mentioned above, it can
be useful to limit the number of times the transport will reconnect to a
server in a given time period. This commit adds two new parameters to
control this behavior.