Fixed bug in SimplePool due to auto-unboxing producing an NPE.
Added TODO
Made Holder generic.
Re-wrote ReplicaSetMonitor in order to substantially simplify it and make it more robust to failure of one or more members of the replica set.  Instead of a single thread that iterates through each member of the replica set and then sleeps for a while before the next round, it's now based on a ScheduledExecutorService, where each Runnable that is scheduled is a single call to ismaster for a single member followed by a notification to the monitor of any state change. By using an executor service, the monitor can devote multiple threads (eventually configurable) to the status checks and update the state more frequently, since a single unreachable member won't hold everything else back.
Fixed regression in SimplePool
Collapsed MongoConnectionStrategy into MongoMultiServerBinding.  It wan't pulling enough weight, and it's making it difficult to add support for refreshing replica set state on a socket exception.
Renamed MongoConnectionManager to MongoServer (and all subclasses similarly renamed).
Renamed Node to ServerDescription
Renamed ReplicaSet to ReplicaSetDescription
More refactoring of replica set monitor.  Now each DefaultMongoServer instance is responsible for keeping its own state up to date, which it will need to do anyway for single server and mongos set binding types.  Additionally it provides the ability for client to register listeners for change events  ReplicaSetMonitor has been folded in to ReplicaSetServerBinding, and simply adds itself as a listener to each DefaultMongoServer instance.
Fixed bug where not always wrapping the connection properly
Wrapping connections in DefaultMongoServer so that we can invalidate the replica set state on exceptions
Re-introduced Session concept.  There are four implementations.  The default is ClusterSession, which for a replica set gives eventually consistent semantics for a replica set.  MonotonicSession implements the read preferences specification and provides monotonic consistency as well as read-your-own-writes even when using WriteConcern.UNACKNOWLEDGED.  Then there are a couple that are useful for queries: SingleServerSession for normal queries, and SingleConnectionSession for queries that set the exhaust flag.  All Operate subclass execute methods have changed to accept a Session instance of a MongoServerBinding (soon to be re-named Cluster).
Renamed MongoServerBinding to Cluster, and sub-classes accordingly.  Renamed all variables from binding to cluster and methods from getBinding to getCluster
Renamed MongoServer to Server
Renamed MongoSyncConnection to Connection, renamed MongoAsyncConnection to AsyncConnection, renamed MongoConnection to BaseConnection.  Sub-classed renamed accordingly.
Moved Session to the right package
Added AsyncSession and implementations, refactored AsyncOperation subclasses to use it instead of Cluster.
Created ServerFactory and DefaultServerFactory implementation.
Simplified Cluster interface.  Removed the method specifically for writes.  Use ReadPreference.primary() instead.
Default to ReadPreference.primary() for queries