Combined  DefaultMongoGateway with DefaultMongoSyncConnection.
Introduced Pool interface, of which there are now two implementations: SimplePool and DefaultMongoConnectionPool.  Moved responsibility for connection pool management out of MongoSyncConnection and into a private inner class of DefaultMongoConnectionPool.  This class, called PooledMongoSyncConnection, implements MongoSyncConnection and wraps the underlying connection.  An instance is created every time a real connection is taken from the pool, and it wraps that instance.  When it's closed, it returns the real connection pack to the pool.  It also marks itself as closed, which ensures that it can no longer be used after it's returned to the pool.  Nice and safe.