dns.hpp: improve relation between DNSRequest and DNSResolver

1) Do not automatically convert DNSResolver to event_base because code
   like the following

     auto reso = ight::DNSResolver(...);
     auto r = ight::DNSRequest("A", "www.neubot.org", [](void) {
         // nothing
     }, reso);

   may lead one to think that the following is OK

     auto r = ight::DNSRequest("A", "www.neubot.org", [](void) {
         // nothing
     }, ight::DNSResolver(...));

   while it is not.

   So, be explicit and replace the automatic cast with an explicit
   ->get_evdns_base() method.

2) While at it, introduce syntactic sugar by which one could construct
   a request from a resolver such that the following

     auto reso = ight::DNSResolver(...);
     auto r = ight::DNSRequest("A", "www.neubot.org", [](void) {
         // nothing
     }, reso.get_evdns_base());

   could be more intuitively written as

     auto reso = ight::DNSResolver(...);
     auto r = reso.request("A", "www.neubot.org", [](void) {
         // nothing
     });