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
Remove +x bits from lib files
Merge pull request #145 from cheald/pool_manager_recycling

Remove +x bits from lib files
Use thread-local variables to prevent recursive #connect invocations, and instead bail out immediately in a recursive connect scenario. Resolves mutex deadlocks and prevents potential infinite recursion in weird networking circumstances.
Merge pull request #146 from cheald/pool_manager_recycling

Use thread-local variables to prevent recursive #connect invocation