DNSResolver(): change attempts argument to unsigned
DNSResolver: allow to set the request timeout
dns: tidy up DNSResolver() invocation using DNSSettings()

Rather than having too many params in DNSResolver() constructor, let's
roll out a class for holding the params.

Has the advantage that you only need to set the values you need.

It would have been much better if C++ supported designated initializers
such that the following would have been acceptable:

    auto r = ight::DNSResolver({
        .timeout = 0.5,
        .nameserver = "8.8.8.8"
    });

However, designated initializers are a C99 only feature, so I'm not
so comfortable with using them in libight (yes, clang and gcc accept
this extension, but maybe in the future we'll need another compiler
that runs on some strange system).

So, what we have instead is the following:

    auto r = ight::DNSResolver(ight::DNSSettings()
        .set_timeout(0.5).set_nameserver("8.8.8.8"));

More boring, but for now it would do.
Make DNSResolver() lazy

Solves the design issue by which DNSResolver was an alias for the default
evdns resolver when no settings were specified, a different beast otherwise.

This will be needed by the next patch that will disable by default the 0x20
hack for the DNSResolver, under the motivation that in OONI we want more
control and we want to enable 0x20 explicitly.

Without the change of this patch, DNSResolver() would have the 0x20 disabled
when constructed with parameters and enabled otherwise.

This is clearly stupid and annoying.

Especially because the reason for having the without-parameters constructor
doing a different thing was to avoid allocation during move semantic.

So, let's make DNSResolver lazy and let's avoid future surprises.
DNSResolver, DNSSettings: use negative values to say "don't"

One may want to specify zero as a parameter, even if this is a stupid
thing to do, and even if I don't know if libevent supports that.

Just allow that in our interface.

Of course this requires to switch from unsigned to signed (yes, this
second part was fixed-up into the original patch ;-).
DNSResolver: disable randomize_case by default

Tested by uncommenting the last DNS test and checking using nc
that the received request does not contain randomized case, and
by modifying such test to generate randomize case and checking
whether the received case was actually randomized.

While there, revamp the test checking for failure of evdns
option-setting function, to increase the test's accuracy.