Introduced new Binding API and refactored operations to use it

This has a number of related components:

1. Added ServerDescription property to Connection, since pretty much everywhere a connection is passed a ServerDescription has to follow (e.g., to get the max document size)
2. Ripped async support out of org.mongodb.MongoCollection.  It will re-appear later in a separate client API.
3. Introduced new Binding and ConnectionSource interfaces
4. Introduced new ReadOperation and WriteOperation interfaces
5. Converted all the operations to implement the new interfaces
3. Introduced new Async Binding and AsyncConnectionSource interfaces
4. Introduced new AsyncReadOperation and AsyncWriteOperation interfaces
5. Converted all the operations to implement the new async interfaces
6. Separated all the extension methods in OperationHelper into three classes: OperationHelper, CommandOperationHelper, and QueryOperationHelper