Refactor NGLayoutOpportunityIterator to use 3-nodes spatial tree

This patch introduces a new layout opportunity iterator algorithm which is based on 3-nodes spatial tree. The new approach has several benefits from the existing one:
- improved runtime complexity to find layout opportunities: O(N log N)
- ability to reuse the tree, e.g. just insert a new exclusion down into the tree. Insert operation shouldn't take longer than 2 x log N time.

BUG=635619

Review-Url: https://codereview.chromium.org/2410773006
Cr-Commit-Position: refs/heads/master@{#425391}
9 files changed