Prevent the backspace key from causing the browser to go back in history

The recent extraction of text manipulation functions slightly changed
the backspace key behaviour. The new interface was only returning true
if an operation was generated as a result of the call (aligning with
all other public functions on the class). This means however that back-
spacing when there is no available positions (e.g., at the beginning of
a document) was causing the browser to navigate back a page.
Allow public access to the SessionController's keyboard handler

This is the first step towards allowing external users to modify (or
disable) the built-in webodf keyboard shortcuts.
Little fixes in editor code that closure compiler did not like
Improve ImageInserter: use img.onload, drop hidden image helper after usage, call onToolDone only when really done
Improve documentation on element types.
This was a TODO in the file which has now been fulfulled.
update license header (real reason: test build trigger)
Add missing entries to the browser based test harness
Ensure PositionIterator.setUnfilteredPosition has round-trip stability

Calling setUnfilteredPosition with a result previously obtained from the
iterator should effectively resume iteration at exactly this position.
As added tests demonstrated, specifying a node with no children and an
offset of 0 was incorrectly causing currentPos to be restored to the value
of 0. This meant calls to iterator.container() would return the a different
value.
SelectionMover.countStepsToPosition will always round both the cursor and target to previous accepted position

Previous implementation would result in some unexpected behaviours when
both the cursor and the requested position were in locations not considered
valid by the supplied filter. This would cause the number of steps between
these to fluctuate unexpectedly by 1.

This change fixed the local user cursor advancement logic (odtDocument, ln 359)
so that the current user's cursor will now acurrately report it's position.
For the failing operation test, previously getCursorPosition was returning
one too many (6 rather than 5), preventing the cursor migration logic from
activating. Now, this logic incorrectly advances the cursor and attached text
node passed the annotation end in the now-failing test.
Move the cursors back into valid positions after inserting an annotation

OdtDocument.getPositionInTextNode relies on the cursors being in
accepted positions in the document. After adding an annotation, any
trailing cursors should be reset to valid positions.
Move the cursor to the start of the annotation that has been removed

Moving the cursor to the start of the removed annotation allows the
scrollIntoView behaviour to work more smoothly. Previously, removing an on-

screen annotation would likely result in the view being reset to the
cursor which was potentially offscreen at the time.

Fixes issue #33
Cope with CaretManager being destroyed while waiting for setTimeout to elapse
Remove some unneeded listing of Node & NodeFilter in jslint globals
Fix wrong usage of NodeFilter.FILTER_ACCEPT on position filter result in OpRemoveText
Remove getTextElements and getParagraphElements from OdtDocument as they can be accessed directly from OdfUtils
Fix an image deletion issue where frame with svg:desc text is not properly deleted

problem: the text 'image description' is left bebind undeleted when trying to remove the image below
<draw:frame>
    <draw:image/>
    <svg:desc>image description</svg:desc>
 </draw:frame>

The fix is: apart from delete all the odf element from target node as we currently doing, we also want to delete all those text nodes that their parent are odf elements.

In addition, i also made small behavior change to getTextElements method of OdfUtils.
Now for character elements such as text:s, text:tab and text:line-break, it returns only the odf element instead of both element and text data.
Eg. if the given range include a <text:s> </test:s> element, it return only the <text:s> element rather than both <text:s> and ' '
Re-implement focus-without-scroll behaviour in Chrome

Previous fix attempt for issue #44 had the unintented side effect of
stopping shift+click from expanding the selection (issue #109).

The scroll-on-change behaviour has actually already been modified as
part of 90d6776. The delay put in to CaretManager.ensureCaretVisible now
ensures the caret is scrolled into view correctly once focus has been
properly set. This eliminates the need for the hidden event trap.

Fixes issue #109

Relevant test:
https://chromium.googlesource.com/chromium/blink/+/ae8d18613905f501a3ce9ba83193fe77e920afbf/LayoutTests/fast/scrolling/scroll-element-into-view.html
Add additional scroll handling when canvas regains focus

The scroll position was only being restored if a local operation was
generated as part of the resume focus. Additional data needs to be saved
and restored of focus is simply stolen and then returned.

If no parent elements have a non-zero scroll, there is no offsets to
restore.
Ensure the tabIndex is reset when the local user's caret is re-added after undo/redo

During the recent event & focus refactor, the tab index was being set on
initialisation of the EventManager class, and would then be unset when
the local caret was removed. This meant that no new events would be sent
to WebODF (e.g., typing) after an undo.
Remove loading of no longer used op classes in SelectionController