Don't use text nodes as tree-walker roots (IE compatibility)

IE10 will throw an exception if the root passed
into a tree walker is a text node.
Ensure all arguments are passed to the tree walker (IE compatibility)
Restore focus to canvas without clearing selection in IE10

This also requires the next focus event to be suppressed after modifying
the selection
Bind window-related events on direct element as well (IE compatibility)

These events will not bubble up to the window if consumed by the canvas
element.
Detect IE10's buggy range client rects for an empty node

IE reports 0 client rects for an empty element, even if the
element has pre-specified fixed dimensions.

As part of this, a more advanced quirk detection system has been put in
place to make these easier to access and track.
Virtual selection demo

Implementation notes
* Rounds selection to the closest offset
* Resets the selection on mouse down
* Changes the mouse cursor on mouse down to indicate text selection is occurring
* Only consider text nodes as valid for highlighting
* Copes with vertical and horizontal scrolling
* Utilised advanced Chrome & Firefox point-to-caret translation
* WORKS WITH IE10

Test-related Features
* Region to test browser-based selection vs. virtual selection

Gloriously nasty implementation of caretPositionFromPoint for IE
Hacks to make virtual selection work (IE compatibility)