Combine 2 exclusions in Layout Opportunity Tree if they shadow each other

Note: The original patch was reviewed and submitted in
https://codereview.chromium.org/2733133002/
The only difference with the original patch is that
NGExclusion::MaybeCombineWith doesn't have NOTREACHED anymore. That's
because some tests and text exclusions don't have exclusion.type set.
We just return false in this case.

This patch introduces the logic that tries to combine 2 exclusions if
possible.
We can combine 2 exclusions if
 - they are adjoining to each other and have the same exclusion type
 - the new exclusion shadows the old one.
   That's because it's not allowed to position anything in the
   shadowed area.

Example:
 <div id="SS" style="float: left; height: 10px; width: 10px"></div>
 <div id="BB" style="float: left; height: 20px; width: 20px"></div>
 +----------------+
 |SSBB
 |**BB
 We combine SS and BB exclusions including the shadowed area (**).

BUG=635619,699703
TESTS=TwoRightExclusionsShadowEachOther,
TwoLeftExclusionsShadowEachOther

Review-Url: https://codereview.chromium.org/2743453002
Cr-Commit-Position: refs/heads/master@{#455876}
8 files changed