Allow alternate easing functions

This allows you to specify alternate easing functions, either by giving the name of a built-in function (such as "smoothStep" or "easeInOutQuad"), or by directly passing a function.  Omitting the function defaults to linear behavior.

The base functionality is implemented in Crafty.easing.  The "Tween" component, `viewport.zoom()`, and `viewport.pan()` all now support these variant easings.  This patch also adds tests.