Add operation test showing steps cache update issue

Steps are rather arcane as they were discovered using a fuzzer (Bella).
Add additional asserts to verify cache integrity

Add asserts to detect cache corruption of the nature experienced here.
These more stringent checks have caused an additional operation test to
fail.
Ensure each bookmark is only present ONCE in the step-to-DOM point cache

Allowing the same bookmark to appear multiple times in this particular cache
causes major headaches when the bookmark is updated, as EACH step-to-DOM (s2D)
entry pointing to the bookmark would also need to be updated.

As there is no real performance benefit from having the same bookmark
appear multiple times, life is made significantly simpler by only allowing
the bookmark to appear a maximum of once in the s2D cache.
Merge pull request #578 from peitschie/cache-fix

Ensure each bookmark is only present ONCE in the step-to-DOM point cache
Do not let the caret overlay grab pointer events.
Merge pull request #597 from adityab/caret-click

Do not let the caret overlay grab pointer events.
Calculate caret display from closest STEP rather than closest sibling

The caret display position is tied to the ClientRect of the associated
cursor's text content, which is usually found to the left of the cursor.

Using a step iterator ensures only steps within the same root as the cursor
are considered, preventing issues such as #260 & #559.
Merge pull request #595 from peitschie/caret-rect-calcs

Calculate caret display from closest STEP rather than closest sibling
Update webodf/tools/karma.conf.js: add new class file lib/gui/GuiStepUtils.js
Add signalling for metadata changes to OdtDocument
and the Editor.
Add methods setMetadata and getMetadata to Editor.
Merge pull request #572 from adityab/signal-metadata

Add the ability to modify document title collaboratively
Don't assume caret overlay is a child of the current OdfCanvas sizer

Any calls to OdfCanvas.setOdfContainer will reset all the odf canvas
children, and may create a new sizer. By using the parentNode of the
overlay directly, the Caret can be safely cleaned up if this occurs.
Remove any active members before replacing the document element on undo

The members are effectively removed and then re-added during an undo.
Replacing the document element actually resets the OdfCanvas and related
sizers, so the members should be removed before this reset occurs.
Ensure focus is returned to the event trap after an undo

This behaviour regressed in c0332ed due to the caret overlay element
being moved inside the overlay itself. As a result, the event trap was
automatically being re-added after an undo, causing the SessionController
to incorrectly skip returning focus back to the trap upon completion.
Merge pull request #598 from peitschie/caret-overlay-destroy

Fix regression during undo
Restore opacity: 0.3; as default for avatar handles

accidentally removed in 234380ef335a18aede408dcb4883155b1113e896
Merge pull request #601 from kossebau/makeAvatarHandlesTransparentAgain

Restore opacity: 0.3; as default for avatar handles
Set element.style.display to "inline-block" also in OdfCanvas' refreshOdf()

Fixes the initial display of documents with no annotations or if disabled

Fixup for 3ae91bbfdd5d33224748fcbe16184376e6a15799
Merge pull request #602 from kossebau/fixInitialCanvasSize

Set element.style.display to "inline-block" also in OdfCanvas' refreshOdf()