Stop link hints from overlapping and detect clickable elements on google inbox

This PR
* rewrites the link hints XPath as DOM code, giving better accuracy and readability
* detects overlapping clickable elements and attempts to find locations where they do not overlap to place a link hint
  - this requires elements to be in the order they appear in the DOM, another reason for using the DOM rather than an XPath
* integrates a variation on PR #1316 to detect clickable elements on google inbox
* allows for multiple images to use the same `<map>` to provide clickable regions
* add support for `<area shape="circle">` in image maps (previously the code assumed everything was a rectangle)
* document the fact that we don't properly support `<area shape="poly">` in image maps
* support clicking `opacity: 0` elements: some websites (notably Facebook) use these to provide the functionality of less attractive elements (eg. `<input type="file">`) while showing an image behind that appears to the user to be the actual button.

This fixes #1307.

Edit: also
* doesn't create link hints for off-screen image maps.
> I would expect it to be more expensive than all the property reads we do

The cost for a single element may be similar. But if you're able to filter out large parts of the DOM earlier, then you get a big win.  On Reddit, I have it default to showing me 100 stories.  About 90 are not visible.  And you'd be able to tell that from quite high up in the DOM.  And this is the common case!

> Yes it is, by about 10% according to a test I ran the other day.

You mean over in #1364?  But that's great!  That means any win of 11% or more by filtering non-visible elements earlier is an overall win.

I'm imagining a `dom_utils` utility which does a root-left-right traversal of the DOM, yielding a list of elements which *might* be visible.