Replace ConnectionTimeout with Dial()

A zero ConnectionTimeout prevents DialConfig() from connecting.  Instead of parameterizing all aspects of establishing a connection, starting with ConnectionTimeout, inject a `Dial(network, addr string) (net.Conn, error)` in Config so that the caller can provide a net.Conn.

Touches up some of the documentation of Config.