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
Don't throw if the caret overlay has already been removed

Various OdfCanvas and undo-related behaviour clear all children of the
canvas. In this case, the caret that is going to be destroyed has already
been removed. Just silently do nothing in this case.
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.