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 track.