Rework several viewport animation functions

- 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)
- 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

Fixes #163, #285, #339, and #616