Allow callers to pass in a custom DNS implementation.

An HTTP client interacts with the network in two main ways: DNS
lookups and connections to HTTP servers. OkHttp already abstracts
the latter by allowing callers to pass in custom SocketFactory
objects, but does not yet abstract the former.

This change takes the existing internal Dns interface, which is
currently used for testing, and turns it into a publicly
accessible DnsResolver interface. This allows callers to
completely abstract all network interaction points.

Examples of what this can be used for:

1. Use alternative resolver implementations with different
   performance / caching / ordering ... characteristics than
   standard InetAddress.getAllByName,
2. Point DNS lookups at specific resolvers different from the
   system resolvers.
3. Do DNS lookups on specific networks, similarly to what
   android_getaddrinfoforiface does.

Change-Id: I6e488acd938067e4c078c6ffe4d5eddb5f3951de