Introduce "Review Mode".

Let DirectFormattingController obey this "edit.reviewMode"
constraint by not creating any operations or processing any
action to format text when the cursor is not within the local
user's annotation.

Signals are exposed to toolbar widgets so they may
enable/disable themselves on the fly depending on the cursor
context.
Add a new gui.SessionContextCache convenience class.

It lazily computes required information and caches it
for further use -- an initial method inside it is
isLocalCursorWithinOwnAnnotation, which contains the logic
moved from DirectFormattingController. It would have been
expensive to perform this check separately everytime the
cursor moves in each controller.
Make hyperlink editing respect review mode constraints.
Move image insertion code from EditorSession to ImageInserter.

This allows access to controllers directly in the widget, as is
the convention.
Make image insertion respect review mode constraints.
Make text editing respect review mode constraints.
Turn PlainTextPasteboard into PasteController.
Make PasteController respect review mode constraints.
Add review editor to programs/editor
Rename SessionContextCache to SessionContext.

Stops caching cursor range.
Rename imageInsertingEnabled to imageEditingEnabled
Hide annotation removal buttons of other authors
when the edit.annotations.onlyDeleteOwn constraint
is enabled.
Add a const `gui.CommonConstraints`, which lists
the common constraints that come with and are
respected by WebODF.

Use these constraints in all previous occurrences.
Change widgets that access controllers to cleanly
unsubscribe and subscribe to signals.
Add a readme for constraints