WIP Partially working. Still needs more corners rounded

TODO
- Add license information to new classes
- Test in an NV build
- Revert Caret changes
- Fix caret blinking around images (blinks really high)
Cope with Safari’s option+char input method

Some IMEs will stack end & start requests back to back. Code has been
added that forces the display to reset between new composition sessions,
rather than incorrectly interrupting the new composition session 0ms later
as would happen if the background task executes after the composition
start event.
WIP Firefox bug workaround

https://bugzilla.mozilla.org/show_bug.cgi?id=773137
https://bugzilla.mozilla.org/show_bug.cgi?id=787305