Add dns.hpp: the DNS resolver

This diff implements a plain DNS resolver that can be used
by the net/connection code to resolve DNS names.
dns.hpp: implement custom DNS resolver

A custom DNS resolver is needed to implement OONI's dnst.
dns.hpp: check for timeout when server is nonexistent

While there, avoid calling one member `result` and another `results`
because this is very very very confusing.
dns.hpp: add pathological test case

One may be tempted to pass the return value of DNSResolver() to
DNSRequest() to avoid saving a resolver.

The code is not designed to support this use case (supporting this
use case requires to implement reference counting of the DNS resolver
object, and we don't want to go down that road).

So, at least make sure that using the code like this does not
lead to crashing libight.