start
Starts the renderer and registers for frameCallbacks.
Goal: When we trigger start, doFrame gets called once per frame until we stop or the animation finishes.
Gotchas:
scheduleFrame triggers callbacks to doFrame which in turn schedules more frames
If we call scheduleFrame multiple times we enter multiple parallel animations loops
To avoid this we check isPlaying and deregister FrameCallbacks when stop is called by users