When MapValue.setValue is used to replace a map's subvalues, work to preserve any
handlers registered for those subvalues.  This is a partial solution (in particular,
ArrayValue will have similar issues).
Expanding for observers and for map-level handlers.
Merging origin/fabbott/master-pending/taskclose into master