[LayoutNG] Introduce NGFragmentGeometry.

This introduces NGFragmentGeometry, which holds the pre-layout values of:
 - The border-box-size (the block-size may be indefinite at this stage).
 - The border, scrollbar, padding.

This is generated before entering into the layout algorithm.

A followup patch will use this data to determine if the size of a
fragment *will* change, given a new constraint space.
(At the moment our caching logic sometimes misses, even though the
resulting size will be the same).

There are some slight behaviour changes, e.g. NG-flexbox will now clamp
the size of the scrollbars, similar to flow layout, etc.
(The clamping of scrollbars occurs when the size of the fragment is
 smaller than the border_padding sum, and the scrollbar occupies the
 left-over space).

Bug: 635619, 667370
Change-Id: I7fe0f6eb53ca1878075c47e772fd22978c231bff
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1530121
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: Christian Biesinger <cbiesinger@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#654582}
26 files changed