Implement Element.scrollIntoView for scroll-behavior: smooth.

Currently in Chrome, a call to Element.scrollIntoView will calculate the amount
each scroller needs to scroll to align the Element as specified and instantly
set the scroll position on that scroller (going from the innermost to the
outermost scroller).

If Element.scrollIntoView is called with scroll-behavior: smooth, instead of
scrolling instantly, we should animate to the desired position.

We can’t simply call setScrollPosition in PaintLayerScrollableArea and
FrameView with ScrollBehaviorSmooth because of the following reasons:
- We want to run the animation from the outermost scroller to the
  innermost scroller
- We want to run the animation one after another. That is, the scroll animation
  on the child scroller should start after the animation on the parent scroller
  is finished.

This patch adds a new class, ProgrammaticScrollCoordinator, that manages
programmatic scroll animations.

BUG=648446
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2650343008
Cr-Commit-Position: refs/heads/master@{#475387}
36 files changed