Make ConnectionManager an Enumerable
Improve statement preparation

Prepare statements on all connections, and make them prepare themselves on any new connections that appear later.

Use the [] feature of connections to save a reference to a prepared statement's ID on every connection it has been prepared on. If the connection has no value for a statement it means that statement has not been prepared on that connection (and the statement will then prepare itself on the connection before executing the request). This makes prepared statements self-healing in face of connection failures.

There is a small leak in that connections will have references to statements, so even if a statement goes out of scope it will not be GC'ed until the connection is. This may need to be fixed.
Merge branch 'prepared_statements_on_all_connections'