Make daemon tasks self-contained; introduce NetDirProvider
The various background daemon tasks that arti-client
used to spawn are
now handled inside their respective crates instead, with functions
provided to spawn them that return TaskHandle
s.
This required introducing a new trait, NetDirProvider
, which steals
some functionality from the DirProvider
trait to enable tor-circmgr
to depend on it (tor-circmgr
is a dependency of tor-dirmgr
, so it
can't depend on DirProvider
directly).
While we're at it, we also make some of the tasks wait for events from
the NetDirProvider
instead of sleeping, slightly increasing
efficiency.