Only process signals created by an operation after execution is complete

This ensures the operation cannot be accidentally interrupted by an
external consumer of an event.

Other parts of the system rely on signals outside of operation execution.
By only batching the signals when an operation is being executed, these
other subsystems continue to operate correctly.
Catch any subscriber exceptions when emitting queued signals

Exceptions thrown during the processing of queued signals may improperly
leave the pendingSignals array non-empty. Rather than letting these
exceptions become fatal, simply catch and log, and carry on processing.

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).