[Reviewer Ellie] Use shared_ptr to manage references to DNS cache entries

Ellie

Can you review my fix to https://github.com/Metaswitch/sprout/issues/541.  The fix is basically to use shared_ptr<DnsCacheEntry> everywhere instead of DnsCacheEntry* in some places - and not to use the get() operation on the shared pointer as this is potentially unsafe without some alternate locking on the object.

I've tested it live - the stress tests no longer hit the scribbler I've been reliably hitting (although they now seem to run in to some Chronos timer-related issues).

Mike