JAVA-691: Finished SASL support.
1. Added support for authProtocol and authSource in MongoClientURI
2. Added support for passing a credentials store to MongoClient containing all the credentials that are needed by this client
3. Re-implemented DB.authenticate using the credentials store and a new authenticate command in DBTCPConnector.  This removes the redundancy in DB and DBPort
4. Added support for negotiated authentication protocol specified by Protocol.STRONGEST
JAVA-691: Added a better test of DBPort's authentication code
JAVA-691: Added equals, hashCode and toString to MongoAuthority, and toString to MongoCredentialsStore
JAVA-728: Added better logging of Mongo constructor. Improved the toString methods of a bunch of classes to make the log look right.  Includes a log of the driver version as well.
JAVA-691: Fixed up toString of MongoCredentials so it doesn't print the address of the password char array
Rewrote MongoClientURI in a more functional style
JAVA-691: Added error checking for password
JAVA-691: MongoAuthority experiment
JAVA-691: Took MongoAuthority and MongoCredentialsStore private (or rather, package-protected).
JAVA-691: Change from STRONGEST to NEGOTIATE.  Removed SERVER-8100 workaround
JAVA-691: Renamed MongoCredentials to MongoCredential and moved inner Protocol enum to top level enum MongoAuthenticationProtocol
JAVA-673: Added support for ssl=true|false to connection string
JAVA-743: JSONCallback now applies decoding hooks for all types
JAVA-691: Removed authentication mechanism negotiation.  Renamed MongoAuthenticationProtocol to MongoAuthenticationMechanism
JAVA-708, JAVA-753: Fixed several read preference bugs which caused queries to be sent to secondaries with unacceptable latency and members that are not available for reads (in recovering state)
JAVA-735 Binary.java should implements Equals and HashCode
Added braces
Merge pull request #104 from sjoerdmulder/timestamp_fix

JAVA-735 Binary.java should implements Equals and HashCode
JAVA-757: Adding a new MongoException subclass called WriteConcernException, which DuplicateKey now extends. WriteConcernException takes the command result and passes toString() of it to MongoException, so the JSON representation of the entire document will appear in logs, instead of just the "err" field
JAVA-757: Changing CommandFailureException and WriteConcernException from static inner class to top-level.