Make ViewportScrollCallback an interface and add child and root classes

This CL splits the ViewportScrollCallback into two implementations with a common
interface. The RootViewportScrollCallback is used for the one root FrameView on
a page and holds a pointer to the RootFrameViewport which allows it to swap the
root scroller with the layout viewport. It also holds pointers to the
TopControls and Overscroll managers allowing it to perform those actions.

The ChildViewportScrollCallback is used for all other FrameViews. It's
essentially a no-op in that it doesn't perform any non default actions; it
simply scrolls the FrameView as usual. Having this split allows the code to be
general and avoid special casing the root viewport.

BUG=505516

Review-Url: https://codereview.chromium.org/2128543002
Cr-Commit-Position: refs/heads/master@{#404195}
10 files changed