Overlay the eventTrap outside and over the cursor.

This commit pulls the event trap outside the cursor,
and as a child of the canvas,
and makes the Caret track the cursor's position and
position the trap above the cursor.

This means that there is no need to manually
blur and focus the eventManager whenever an
operation is executed.
Add quirk `elementBCRIgnoresBodyScroll` and it's
workaround in DomUtils.getBoundingClientRect.

When the body has scrolled, an element/range's BCR
should update to reflect the new coordinates.

Instead, in iOS Safari, an element's BCR turns out
to be different from the range's (correct) BCR,
because the element's does not take the body's scroll
into account.

This workaround attempts to trigger a quick bodyscroll
and detects this quirk by measuring the BCRs of a
test element vs it's range representation.
Introduce a 'composer' element in the cursor.

The composer reflects the text inside the eventTrap
and styles it with an underline to match other native
IMEs.
Make only EventManager handle eventTrap in the
DOM.
Restore the eventTrap and focus on undo.
Set pointer-events: none on the cursor,
so that the mouse pointer remains caret-shaped
when hovering over it.