Web Animations: Introduce String based KeyframeEffectModel

Note: This is a rework of issue 212023004

This patch refactors KeyframeEffectModel to support different types of
keyframe values. The common keyframe logic is retained in
KeyframeEffectModelBase to be inherited by the keyframe type specialisations.

KeyframeEffectModel is then templated on Keyframe type, with a hierarchy of Keyframes
including StringKeyframe and AnimatableValueKeyframe being introduced.

String based keyframes are being introduced to properly support the JS API
for Web Animations element.animate().

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

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