oauth2: use external http client when doing oauth2 calls
Created by: keegancsmith
You can configure TLS settings via our site settings. In the future we may have other settings which affect sourcegraph's ability to communicate with the outside world. httpcli's external client takes into account those settings. This commit ensures golang.org/x/oauth2 will use that client. This commit injects the client at the top-level oauth middleware.
For example this should ensure that oauth against a gitlab with a self signed certificate will work.
This also includes some other refactorings and additions to make this possible.
Fixes https://github.com/sourcegraph/sourcegraph/issues/4652