Group direct formatting of multiple paragraphs into a single enqueue
Improve some documentation and variable names in undo stack
Ensure continuous operation is actually adjacent to existing edit ops
Use operation groups to improve undo behaviour

Support has been added for operation groups. Operation groups (i.e.,
a group of ops queued together) are never split across multiple undo
states.

When groups are used, a new operation will be considered continuous
with the current undo state if it is continuous with the most recent
operation of the same type in the most recent group in the existing
undo state.
Allow edit & non-edit ops to interleave if edit ops are continuous

Previously an edit would always start a new undo state if there last
operation in the current undo state was a non-edit. This change means
moving the cursor around will not reset the redo stack, more closely
matching other office suites.
Re-use session.enqueue to replay operations for the undo manager

An executing operation needs to emit various other signals (e.g.,
signalOperationStart) in order for various other controllers and UI
managers to perform correctly (e.g., preserving focus, re-drawing
the selection etc.).

The simplest way to ensure this happens is to use the session.enqueue
call. The UndoManager will ignore any new operations while performing
an undo.
Improve function names in UndoStateRules
Improve flow readability slightly in UndoStateRules