SceneHierarchy playback optimisations

This knocks 75% off the time required to playback a 20 frame SceneCache animation sequence, by preventing SceneHierarchy updates during playback. The SceneHierarchy is one of our slowest components (the one place where Python code deals with the full scene complexity at all) and although in theory hierarchies can change with time, it's really not necessary to update the hierarchy every frame on the offchance that it might have changed.

This is built on top of pull request #657 - only the last two commits are unique to this request.