a slight improvement over using setTimeout

The problem with MutationObservers are that their callbacks are only
called after the immediate call stack is empty. You must therefore call
the disconnect outside of your own script, either using setTimeout, or
in the mutation observer itself. The downside to this is that you cannot
stop watching mutations in the middle of a script, it will essentially
record the tail-end of your script in all cases.

For this reason, the callback parameter is now optional. You can also call
transact() without a callback, to record everything up to the end of the
current script.
Wrap the _mouseStop command in undoredo

This monkey-patches jquery-ui so that when you stop dragging a semantic
block, it records DOM changes until script end, which causes your block-add
to become undoable.