Refactor animation.js to use a time based rather than frame based approach.

Crafty.easing
---------------
- A new object `Crafty.easing`; it abstracts the concept of a state that changes over time.
- Used in the new "Tween" and "SpriteAnimation" components; can also be used when we fix the viewport animation functions.
- No public documentation right now, since it's for internal use.
- Added tests in core.html

Tween
---------------
- Uses the new easing object
- Now treats a set of properties to tween as a group, only sending one "TweenEnd" event per group
- Removes some special handling for mouse events that I'm pretty sure is already handled by how the "2D" component works.
- Updated the docs and added tests in core.html

SpriteAnimation
---------------
- Uses the new easing object
- Refactored the interface completely.  Uses `reel()` to set and change reels, `animate()` to play them.  Favors composable single purpose methods over tons of optional arguments.  See documentation/source for full details.
- The duration of an animation is now set when creating a reel, instead of when playing it.
- Updated the docs and tests in animation.html
Switch default duration of easing objects to ms instead of frames.

This changes the behavior of "Tween" and "SpriteAnimation."

You can set duration explicitly with a string.  For instance: "10 ms", "10 s", "3.5 seconds", and "12 frames" are all valid durations.