Enable asynchronous handling of RPC over HTTP (RIPD-390)

shared_ptr doesn't have empty().  Is use_count() == 0 the right test?  Or should this be m_detach_ref == nullptr (or equivalently !m_detach_ref).  The difference is that it is possible for a shared_ptr to still be pointing at a control block, but have p == nullptr.  It isn't likely.  But it is possible.  (shared_ptr is one complicated piece of work).