[LayoutNG] Adds support for shape-outside.

This reuses a lot of the existing code for shapes located within
core/layout/shape.

As a result of this after we perform a layout on a float, we need to
copy some additional shape data back into the existing tree so that the
ShapeOutsideInfo is up to date.

Devtools currently requires the ShapeOutsideInfo object to be up to
date for the appropriate LayoutBox object. (This is used to draw the
"shape area" when hovering on an element within devtools).

In the future (once everything has a NGLayoutResult) we'll likely be
able to remove the ShapeOutsideInfo object, and replace it with just a
"computed shape" living off the NGLayoutResult.

The majority of the work is done within ng_layout_opportunity.cc which
calculates a new line-layout-opportunity based on the shape area.

The rebaselines in this patch:
spec-examples/shape-outside-{010..019}-expected.txt
... are for "change detector tests". We do pass them in LayoutNG but
"better". (We place things closer to the shape typically). One LayoutNG
has been switched on we can fix/change these tests.

Bug: 635619
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I029b1503be74b4a17e0a634ec93c644ff4352358
Reviewed-on: https://chromium-review.googlesource.com/1032884
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559368}
27 files changed