Handle connection failure in between preparing and executing
Limit conn trashing across pool instead of per-conn
Avoid conn leak in prepared statements, better err handling

If a prepared statement was not recognized by the server (for
example, if it was restarted), connections were not being properly
returned to the pool.

Additionally, the re-submission of the original query after the
preparation completed was not borrowing connections properly
(by finding the least loaded conn and incrementing its in_flight
count).

Last, if there was a connection error while preparing an
unrecognized prepared statement, that error was raised directly
instead of retrying the operation on other hosts.
Handle failed ResponseFuture after re-preparing stmt
Less agressive connection use for prepared statements

When preparing a lot of statements at once (as part of a background
operation), a connection could be pushed over its in_flight limit,
resulting in potential failures for normal operations.  This
deprioritizes those types of operations, forcing them to wait to claim
enough stream IDs.
Renew shutdown pools that are left in session
Add methods to dump pool states
Check actual conn in_flight before closing trashed conn
Remove unused Connection.id_lock attribute
Add timeout to ResponseFuture.result()
Include defunct/closed in Connection.__str/repr__
Handle failure to submit request after preparing

After re-preparing an unrecognized prepared statement, the
prepared statement will be resubmitted.  The submission process
was not being checked for failures, which could leave the ResponseFuture
hanging endlessly.
Handle failure to submit message when re-preparing

Similar to the fix in 40b3a53, this could ignore failures
when retrieving a connection from the pool or sending a message
on that connection during repreparation of an unrecognized
prepared statement.
Log at debug when re-preparing unrecognized stmts
After re-preparing stmts, run query in executor

The query was being resubmitted on the event loop thread,
which could cause a deadlock if there were not any connections
available for use.
Log when connection creation is actually started
Raise min trash interval to 10 seconds
Check open conn count before submitting new creation task
Include open count in pool state string
Don't recommend using sudo + pip