Introduce support for text-decoration-skip: ink

In addition to the "objects" default value, support value "ink" for
text-decoration-skip. The spec [1] describes this as:

    "Skip over where glyphs are drawn: interrupt the decoration line to
    let the shape of the text show through where the text decoration
    would otherwise cross over a glyph. The UA must skip a small
    distance to either side of the glyph outline."

This CL supports this for all underline, overline, and line-through and
all text-decoration-style styles: solid, double, dashed, dotted, wavy.

The implementation approach is: If ink skipping is requested, clip
rectangles are calculated for the text intercepts. The vertical bounds
for those clip rectangles are computed from the extends of the underline
style: For example tight bounds of a Bezier curve are calculated for the
wavy underline style. Using these vertical boundaries, the text
intercepts are retrieved from Skia, via GraphicsContext. Skia computes
them from the glyph shapes and two distances, the vertical bounds that
were previously calculated. The rectangles are inflated in the baseline
direction by the underline thickness itself, same as WebKit. These clip
rectangles are then used to clip out painting an underline at the
calculated positions.

Known issue at this point: Due to the way we draw upright in vertical
text, currently there is no correct way of computing the ink skip
rectangles in this case, tracked in crbug.com/655154

[1] https://drafts.csswg.org/css-text-decor-3/#text-decoration-skip-property

BUG=649700, 581456
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2416993002
Cr-Commit-Position: refs/heads/master@{#433415}
13 files changed