Only process signals created by an operation after execution is complete

Delaying signal emitting until after the operation completes ensures the operation cannot be accidentally interrupted by an external consumer of an event.

In addition dear reviewer, subscriber exceptions when emitting queued signals are now caught and simply logged (rather than rethrown). **This is a behavioural change from master.** The assumption here is that consumers of signals should NOT cause the processing of an operation to fail (e.g., if a UI binding goes bad).

# Local testing performed
* checked text editing, selection & undo/redo work in src-localeditor.html
* ensured document still loads in src viewer
* checked split screen editing still updates and sends edits.
This should get a note that `args` should be modified after the `emit` call only if any changes do not break the signal message. E.g. reusing arg objects for something different will break the delayed signal where it was used before.