Keep a local (internal) shared_ptr whenever
user callbacks are run. This allows user
callbacks to drop (reset()/dtor) Operations
or Monitors safely.
Ref must to captured before mutex is locked,
which is safe as the internal weak_ptr is
not changed after build() (despite being non-const)
Avoid exposing refs. from monitor queue
which might then be used after release().
Also allows users the possibility of caching
getSubField() until root.get() actually changes.