Add getNativeRange method with optional DM range argument

Allows getting of the native range for any DM range, not just the
currently selected one. Also handles edge cases and exceptions.

Change-Id: I63619cfb3c0e8a1e566668996b91a3ba0fa436d7
Separate computation of highlights from rendering

This allows us to ask the focusable node for its dimensions
without rendering a highlight.

Change-Id: I46ba279c840628ca1d7ebb4b71dd99f066bfd5fa
Remove getSelection*Client* methods

Maintaining two versions for one optimisation is too much work.

Change-Id: I92fdcc24c6114e5e02d5bc5b227b1660d2429e52
Rename inlineRects to startAndEndRects everywhere

Also rename outerRects to rects in FocusableNode

Change-Id: I8d3f2bc303495bf140710874c897b2477531236b
Allow specification of range when getting selection rectangles

Change-Id: I474aee6c202859c08df2fd1b40abc3d4e2bc370c
Provide a method to get all the rectangles for a given selection

Change-Id: I46d30ef788cfe93defbc793ca678db886994622e
Work around Chrome's Range.getClientRects bug

Do some DOM traversal so we only calculate for ranges which
Chrome can handle, then concatenate

See https://code.google.com/p/chromium/issues/detail?id=324437

Change-Id: I63c7a50f7efb73937b65c055675378f3b880e03e
Merge "Add getNativeRange method with optional DM range argument"
Merge "Separate computation of highlights from rendering"
Merge "Remove getSelection*Client* methods"
Merge "Rename inlineRects to startAndEndRects everywhere"
Merge "Allow specification of range when getting selection rectangles"
Merge "Provide a method to get all the rectangles for a given selection"
Merge "Work around Chrome's Range.getClientRects bug"