The `Connector` trait and a layer of connectors

I've created an issue at hyper repo, and decided to also post here to involve more people.

The summary is we need a layer of connectors. A Connector is a piece of logic that establishes a connection in a connection-based protocol. Connectors can usually be composed (i.e. work atop of each other, like HTTP works over TCP), and having a layer of connectors would enable us to write more composable libraries and more flexible programs.

I'd like to avoid copy-pasting the body of the issue everywhere, so please go to https://github.com/hyperium/hyper/issues/2078 to learn more.

Also, #rust2020

internals.rust-lang.org is for discussion of changes to the language itself. users.rust-lang.org is for users of rust.