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.