The goal here is to hoist all meaningful watcher/mirror/canonical manipulation
onto the owner thread. But since that must necessarily happen asynchronously,
we need to make sure that canonicals are in a sane state immediately upon
creation, since otherwise a mirror from another thread may attempt to connect to
a not-yet-initialized canonical.
The current mechanism is slightly more pure from an implementation-perspective,
but a lot more confusing for consumers. After some thought, I think we should flip
them around.
This patch does Canonical - I'll do Mirror in the next patch.
The MDSM is constructed and destroyed on the main thread, but runs most
everything else on the task queue. So we need to bend the rules a bit here
to conveniently connect its mirrors during construction.