Collapsed MongoAsynchronousSocketChannelGateway into DefaultMongoAsyncConnection
Fixed design flaw with MongoAsyncConnection.  Formerly there was complicated logic over who is responsible for returning the connecting to the pool.  Now it's very clear.  The only one who does it is ConnectionClosingSingleResultCallback. Now MongoAsyncConnection doesn't have to track any state about whether it's being used.  It's not it's responsibility any more.  As a consequence, DefaultMongoAsyncConnection doesn't have to be aware of the connection pool.  That responsibility can be moved to a wrapped MongoAsyncConnection that is managed by the DefaultMongoAsyncConnectionPool.

Along the same lines, also created a separate implementation of MongoAsyncConnection that is just responsible for authentication.  It wraps an underlying connection and calls the underlying connection after completing authentication.
Removed MongoConnectionManager.releaseConnection method.  Clients can just using MongoConnection.close instead.  Updated all the clients.
To allow this, added a wrapping connection class in MonotonicallyConsistentMongoServerBinding that allows close to be delayed on the cached connections.