Make cursor sub-element CSS styles component-specific

Previous implementation was using the element type (span or div) to
determine if the element was a handle or caret. This is problematic if
additional elements are placed inside the cursor node (as necessary for
proper IME support)
Allow multiple subscribers to the cursor update event
Workaround for Firefox selection.collapse bug

Attempting to collapse a selection if a content editable element is the
current activeElement for the document will cause the collapse call to
throw an exception.

https://bugzilla.mozilla.org/show_bug.cgi?id=773137
https://bugzilla.mozilla.org/show_bug.cgi?id=787305
Let EventManager.focus restore positions for all scrollable parents

Scrollable parents that had no current scroll offset were being ignored.
This meant that the view could end up reset at a non-0 scroll offset when
focus was restored to the event trap.
Support text input using the OS’s IME system

This change extends the use of the event trap to allow in-line character addition
using the OS's IME. The event trap will now be moved to within the local user's
cursor block, and will become visible when a composition start event is detected.

This has been tested on Chrome, FF & Safari on all platforms. In addition, this
enables support in FF on Android.

Known issues
- No IME support on Chrome under Linux. The compositionend event emitted by Chrome
contains no data, so the input character can't be detected.
Improve Opera 11 compatibility slightly
Support back-to-back composition end & start events

Some IMEs will stack end & start requests back to back. If the selection
is modified between an old and new session (e.g., via text updates), the
new composition session never starts. One mainstream example of this is
inputting text using MacOS’s option+char method
Workaround Safari post-composition key press event error

When composition session is ended on Safari under MacOS by pressing
another text char, Safari incorrectly reports the next keypress event’s
“which” value as the last compositionend data, rather than the new key
that was pressed.
Workaround Chrome issues with Linux IMEs

In Chrome 31.0.1650.63 onUbuntu 13.10, the composed character isn't set
in the compositionend event. The text is added to the focused field
immediately after however in a textInput event. Firefox appears to be
unaffected by this bug.
Clean-up event trap more thoroughly after input

Repeated text entry events can result in lots of empty text nodes
Merge pull request #238 from peitschie/ime-support

Add support for browser IME & on-screen-display keyboards
Only load a class if it has not yet been defined.
Add a the ability to run tests outside of the tests.js script.
This is preparation for using Karma to run the tests.
Add minimal karma tester for PhantonJS.
See tools/karma.conf.js for more information.
Add support for junit output.
Add special check for null values.
In JavaScript, typeof null is "object". The added check avoid treating a null value as an object.
Pass http requests from the tests to a special small server.
Karma has no support for PUT and DELETE. The simplest workaround is to start
as small server and proxy to it for http requests from the tests.
Update CMakeLists.txt to master.