Shields are dead, long live getClientRects

Shields are evil for a number of reasons:
* The require us to modify the CSS and HTML of CE nodes,
  including generated content nodes which should really
  just be left alone.
* Shields (images) can't, or shouldn't, be appended to many
  types of element (void elements, tables)
* Don't work on wrapped inline text.

Instead, use the native Element.getClientRects for measuring
focusable nodes, which is super fast, and gives us the outline
of wrapped inline nodes.

After calculating all the rectangles they are filtered to exclude
any which are entirely contained by others.

An imaginary bouding rectangle is calculated which contains all
the rendered highlights, and is used to calculate the position
of the context menu.

Cons:
* Without permanent image shields, selecting over a complex focusable
  node doesn't render the selection as cleanly. This could be implemented
  later if really required, but performance issues need to be considered
  (e.g. on page resize every shield is recalculated).
* The rectangles calculated for wrapped text don't account for
  line height, so there are gaps between them. Future work could
  try to special-case this, but cases with multi-sized text or <sup>
  tags complicate the issue.

Bug: 52339
Change-Id: I09f1c08500ab48849880c6120501a25fca174b50