Fix #33: Missing link hints: Fix inline elements with several rects.

Problem:  Inline elements can have several rects.
          We are considering only the first one.
          If the first one is not visible, the whole element is ignored.

Solution: Consider all element rects. Choose the first one visible.
Fix #33: Missing link hints: Refactor.

* At getVisibleClickableElements():
    - Extract methods:
        · getFirstVisibleRect()
        · getFirstVisibleFloatedChildRect()
    - Tidy up remaining code.
Detection improvements: Use DOM traversal instead of XPath.

This is needed to be able to discriminate depending on computed style.
Using computed style is the simplest way to implement detection by
cursor style in a subsequent commit.
Also, DOM traversal is faster and, IMHO, resulting code is more
readable.
Detection improvements: Add basic ARIA support.

Detect elements having an ARIA role implying clickability.
See http://www.w3.org/TR/wai-aria/roles#widget_roles

This makes important sites (like GMail) usable, which previously
were not.
Detection improvements: Add detection by cursor style.

For custom widgets that don't use form controls or ARIA markup,
we can still detect clickable elements by looking for items
having cursor style set to "pointer".

As this property is usually inherited, we look only for elements
whose parent doesn't have that cursor style too.

Usually, normal elements and ARIA roles are enough, and this kind of
detection introduces too much noise. But for some pages, having this
capability proves itself very useful. Therefore, we introduce a setting
to turn on/off this kind of detection. By default, it's set to off.
Detection improvements: Fix click simulation.

Problem:  Newly detected elements show that click simulation does not
          work sometimes. That seems to be caused because we only fire
          the 'click' event, while a real click usually involves more
          events (mousedown, mouseup, etc).
Solution: Imitate real click as much as possible, firing all
          associated events.
Detection improvements: Don't show hints for elements hidden by overlap.

Problem:  Sometimes, hints do show for elements hidden by another
          overlapping element (mainly popup menus and the like).
Solution: Improve visibility checking code to account for this.
Detection improvements: Hidden by overlap: Consider rounded border.

Problem:  If element has a topleft rounded border, the upper left point
          lies outside the element (region outside the border doesn't
          really belong to the element). Consequently, topmost element
          detected there is not the element, but the one behind it. This
          makes the visibility checking code incorrectly think this
          element is hidden by overlap.
Solution: Add offset to get to the point nearest to the upper left
          corner, but at or within the border.
Reorganize settings.

Setting were a bit bloated already.
This just reorganizes them, adding some groups and changing order of
some items.
Fix issue: Not working first time on new window.

Problem:  When opening a new window, or a new Safari instance with no
          previously open tabs, extension doesn't work. You have to
          reload or go to a different url for it to work. This seems to
          be caused by the activate event being fired while tab url is
          not yet set. Listening code in injected.js receives (and sets)
          and undefined url, which makes following code fail.
Solution: Directly access document.URL instead of having it set by tab
          activation listening.
          NOTE: This has a secondary effect on excludedUrls setting
          behaviour. Previously, an iframe having a forbidden url would
          be hinted anyway, if contained in a document with an allowed
          url. Now, everything coming from a forbidden url, will not be
          hinted, whether it's the main frame or a contained iframe. We
          think side-effect is in effect better that the previous
          behaviour, so we leave it there.
Detection improvements: Hidden by overlap: Refine.

Some improvements to hidden-by-overlap detection code:
- Augment default offset to 2 (1 was observed not to be enough).
- Don't add offsets, but choose the maximum.
- Return false if offset point outside the element.
Merge pull request #37 from eliseomarmol/detection-improvements

Merging lots of changes from @eliseomarmol