Categorise async operation tests
Added ServerDescription property to Connection
Moving some MongoCollection async tests to Operation-based tests.
Removing async support from org.mongodb.MongoCollection.  It will be added later to a dedicated sets of interfaces for async.
Introduced new binding API and a simple implementation of a ReadWriteBinding
Introduced new ReadOperation and WriteOperation interfaces
Now that Connection has a ServerDescription, no need to pass it separately to Protocol.execute/executeAsync
Removing connection pinning in org.mongodb.MongoClient, until we come up with a better API for it.
Added getBinding method to Fixture
Converted all operations that use a cursor from implementing Operation to implementing ReadOperation
Converted all remaining read operations from implementing Operation to implementing ReadOperation
Converted all write operations from implementing Operation to implementing WriteOperation
Added CommandReadOperation for commands that read and CommandWriteOperation for commands that write, and removed CommandOperation.  That was the list Operation implementer, so removed that too.
Added CommandReadOperation for commands that read and CommandWriteOperation for commands that write, and removed CommandOperation.  That was the list Operation implementer, so removed that too.
Fixed covariant return type for ReadBinding.retain
Added async binding and operation interfaces
Added simple implementation of an AsyncReadWriteBinding
Added Fixture.getAsyncBinding
meh on AsyncConnectionSource
Updated first round of async write operation to use AsyncWriteOperation