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.

This is a bit better OO as well since the address is now passed into the connection without taking out the host and port from it.

cc/ @estolfo @gjmurakami-10gen