Beginning the work again on the ConnectionPool.

This current implementation guarantees that checking out from the pool
will always be a connection pointing at the correct host. It also leaves
the API open to guarantee a thread and connection can always remain
together, as long as the number of threads is not greater than the pool
size.

[ WIP mongoid/mongoid#2369 ]
Abstract pinning/connections code
Ensure to remove from available when getting