Wrote new socket handling logic
Replaced the guts of NodeConnection with SocketHandler
SocketHandler now handles SocketErrors the right way

SocketError can be raised before @io is set, which wasn't handled before.
More efficient concatenation of ByteBuffers
CqlConnection, the new NodeConnection
Errors in Future listeners are now silenced

Before, if a listener raised an error, the remaining listeners would not be called.
The FakeServer randomizes a port
IO reactor rewrite, now protocol agnostic

Everything protocol related has been moved to CqlConnection.
Implemented ColumnMetadata#eql? and #hash
Moved NotConnectedError
Updated *Client to use the new IO reactor
The SocketHandler now unblocks the reactor on #write
Thread safety and optimization fixes to CqlConnection
Wrote tests that exercises the IO systems by talking to Redis

A very basic implementation of the Redis protocol.
The future returned from IoReactor#stop resolves to the reactor
Lock twiddling

Trying to avoid locking in the IO loop. Since changes to the list of sockets is something that happens rarely we can make a copy of the list when we add something, which means that we don't need to guard the access of the list in the loop. We only need to lock over the copy and reassignment to the local variable, so that two threads can add sockets at the same time (and if the loop misses one of the additions it doesn't matter, it will pick it up on the next tick).
Started on documentation for the IO reactor.
Renamed Cql::Io::CqlConnection Cql::Protocol::CqlProtocolHandler
Continued the renaming of connections to protocol handlers
Renamed Cql::Io::SocketHandler Connection