Refactor socket creation.
This is the first part of a refactoring after I saw a better pattern for handling socket creation which didn't require us to do the DNS lookups twice. The first DNS lookup is done in the address class, and then split out, so it made more sense to generate the sockets from the address itself, which cleaned up all the ugly handle_connect code that was still around.
Add description change events.
Adding logging and loggable infrastructure
Further along the server implementation card, this commit introduces the ability of a server description to update itself with the result of an ismaster command. The result of any changes will fire corresponding events to the server, starting with a host being added or removed in a replica set. This is part of RUBY-677, but does not complete it.