Support hyperlinks being added to a document after load

Also added a few hyperlink helper methods into OdfUtils.js
Added hyperlink support for text elements
Added editor buttons for applying or deleting hyperlinks
Renamed HyperlinkManager to HyperlinkController
Merge pull request #258 from kevinlli/hyperlinksupport

Add hyperlink support for text
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