Merge pull request #121 from trnl/3.0.x

Added Travis configuration
Changed log level to INFO for message about going into a wait state while trying to get a server.
JAVA-836: Only log on state change in server monitor thread.
Added assertion for session open
Implementing read preference specification for command handling.  Only "obedient" commands obey the read preference.  All others are silently routed to the primary.  There is some discussion that instead we should throw an exception, but that has not been finalized.

This also fixes JAVA-835, in which it was discovered that we change the read preference even with a Direct connection to a secondary, which goes against the intent.
Refactoring async operations in preparation for upcoming change to enforce read preference spec for async commands:
Moved async operations out of their own package
Added ClusterDescription parameter to the constructor
Implementing read preference specification for async command handling.
Fixed deadlock in initialization code for the cluster
Ignoring tests temporarily that break with SSL-enabled server.
Ignoring PMD warning that I believe to be spurious
Added equals/hashCode/toString to ClusterDescription.
Made getAll return a sorted set.
Better fix for DefaultMultiCluster race condition.
Added first unit test for DefaultMultiCluster discovery
Suppressed deprecation warning in the group test
Pojo encoder now ignores transient fields
Divided build.gradle into 3 parts. Added 'util' project with test categories and taglets. Added 'testAll' task
Updated Maven deployment configuration. Extracted Osgi configuration.
Removed PMD
Fixed issue with Findbugs task
Trying to fix the race condition in cluster code
Guarding against re-entrancy with additional synchronization.  Updated javadoc to warn about it.