WIP: First pass at creating our own socket connections

This allows the user to set the socket options before the connection is
established. The previous approach of setting the options after the connection
was established was not correct.
Don't see why not (just call it `extra_kw`), especially since we're vendoring our own `create_connection` anyways.