Animation unification

This PR adds support for animation looping to entities. It also unifies the "loop" engine used by Avatars and Entities to be the same code/logic.

* AnimationLoop - this is a new class that handles all the looping, first frame/last frame, hold logic for animations. This runs independent of geometry and can run in the simulation loop of the entity server, or in the client.

* AnimationHandle (used by Avatar animation) now uses AnimationLoop for it's looping logic.

* ModelEntityItem now uses AnimationLoop for it's looping logic.

* Added new "animationSettings" property to entities. This is a JSON style string with all the animation settings. Entities still support the old API for animation fps, playing, frame index, but now also support animationSettings.

* bonus unrelated commit suppresses repeated messages for dangerously deep recursion and unreasonable flight times.
NOTE: as far as I tested this, there is no difference in behavior between the new logic and the old logic. I kept this comment in here for now, in order to assist in further testing and/or if we notice something different between this case.