Re-add snap-back behavior (Blink side, part one).

This is a preliminary framework designed to allow landing of:
https://codereview.chromium.org/175903002/
https://codereview.chromium.org/151483008/

No functional change until those patches begin landing.

BUG=337919
TEST=none
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/180553003

git-svn-id: svn://svn.chromium.org/blink/trunk@167920 bbb929c8-8fbe-4397-9dbb-9b2b20218538