Inlined the client spec setup

It was used by the synchronous and asynchronous clients before, but now the synchronous client's tests only assert that it calls the asynchronous.
Made it possible to associate data with protocol handlers

Very useful to tag connections with host ID and datacenter
Automatic peer discovery & connection, step 1
Not connecting to the same peer twice
The :hosts option is now uniq'ed
Refactored AsynchronousClient#discover_peers
Removed an unnecessary assignment
More specs for peer discovery
Deprecated the :host option in favour of :hosts

Also fixed docs around that options
Fixed doc syntax
Added Future.first
Marking Future and ByteBuffer as private in the docs

They have never been a part of the public interface, there are no public methods that return ByteBuffers or Futures.
Marking more things private
Added Future#recover and Future#fallback
Successful connection only requires that one node responds
Connect only to nodes in the same DC

Automatic peer discovery will only connect to nodes in the same data centers as the seed nodes.