Reuse PoolManager instances rather than creating new ones. Reuse Node and Pool instances as possible. Eliminates socket and file descriptor leaks from replica set hard_refresh! invocations
Never clobber old pools when calling ReplicaSetClient#connect. Instead, reuse the pool the same way that ShardedClient does. As a side effect, fixes RUBY-457.

Additional pool cleanup and health checks; expired pools are never reused now, and instead will be released and re-acquired if available. Minor refactor of ShardedClient to DRY it up a bit.
Add test coverage for socket recycling
Add pool cycle test. Always attempt a connection refresh on connection failure, even if it was a command given, to ensure that we can always fail over in the event of a primary step-down
Minor fixes to pool reuse tests (refactor, cleanup used connections)
Style fixes; `&&` and `||` rather than `and` and `or`
Merge pull request #144 from cheald/pool_manager_recycling

Eliminate socket leaks by recycling PoolManager instances