Added executeAsync to DistinctOperation

Refs JAVA-936 - Create Async Operations
Normalisation of apply signature
Added executeAsync to AggregateOperation and AggregateExplainOperation

Refs JAVA-936 - Create Async Operations
Add version check to AggregateExplainOperaitonSpecification
Make BulkWriteOperation throw if executed more than once

JAVA-1124
Also tests ported from 2.12 branch
BulkWriteResult.getModifiedCount should throw if server version < 2.6

Refs JAVA-1135
Tests ported from 2.12 branch
AggregateOperation update

Fix tests to ensure they check server version.
Added check isModifiedCountAvailable() to translateBulkWriteResult

And ensure we check it before asserting in DBCollectionTest
JAVA-1185: Replace : with . in logger names.
JAVA-1178: Removing special handling of jnote/wnote for bulk write operations against servers <= 2.4
JAVA-1159: If the connection wasn't already null, retry once before declaring a server down.
JAVA-1160: ClusterDescription.getAny now returns any ok server, not just primaries and secondaries. A new method, getAnyPrimaryOrSecondary, has been added for server selectors that will only talk to primaries or secondaries.
JAVA-1161: When a replica set member returns an empty list of hosts or no set name, assume it's not yet joined the replica set and do not remove every server from the client view of the replica set.
Ported some new tests from 2.12.x branch to ensure compatibility in 3.0.
Connection is now reference counted instead of closable.  This solves a number of problems elegantly, like allowing an exhaust cursor to extends passed the lifetime of the ReadBinding where it got the connection from.
Added some package private access to server and pool so that tests can examine on their state.
Ensure that the primary's connection pool has no connections in use after after test.
Ensuring that reference counts of connections are properly released in tests that weren't
Replacing void MongoAsyncCursor.start(AsyncBlock) with MongoFuture<Void> MongoAsyncCursor.forEach(Block), so that errors can be reported.
JAVA-284: Adding requiredReplicaSetName property in MongoOptions