Make caret and avatar overlays rather than inline content

Having the caret and avatar display inside the cursor node causes text
wrapping and other element shifts to occur in some browsers (mainly FF)
due to there being layout impacts from the almost-but-not-quite 0-width
cursor element.

Moving to non-inline overlays for these bits of chrome allows the cursor
to be hidden completely.

TODO
This commit introduces a regression when composing text using an IME
as the overlay doesn't advance properly during composition.

Fixes #86 & #49
Fix caret placement when composing text via the IME

If the cursor node itself is visible, use the bounding rectangle from that
as the highest priority for the caret position.