Rework the viewport animation functions

This isn't quite ready to land yet, but thoguht I'd open the PR so folk could see the changes.  This alters several aspects of the viewport:
- Changes pan and zoom to work with Crafty.easing. (Time based instead of tick based.)
- Makes sure the zoom animation is nice and smooth.  (Surprisingly tricky)
- Fixes a bug in how scale is treated by the DOM/Canvas renderers
- Adds a new "StopCamera" event for stopping any extant camera animation (and uses it when a new animation is requested.)
- Fires an "CameraAnimationDone" event when a camera animation completes

Along the way this fixes #163, #285, #339, and #616