client initializer with provided config + http client

Added the ability to initialize new clients using outside configurations and HTTP client objects. This allows users of this library finer control over how requests are made and introduces the possibility of custom dial methods that provided behavior such as SSH tunneling.

This solution also seems much cleaner than my original pull request, https://github.com/coreos/go-etcd/pull/153.

A structural change in this code is the removal of client-attached HTTP initialization methods in favor of unattached HTTP-client generators. Given that the new dial function could also come from another source, it no longer made sense to allow modification of a `DialTimeout` configuration option.