Refactored Timeline to use new Playback class.

The Playback class provides a central controller for all clients who wish to initiate playback or react when playback occurs. Playback classes exist for each Context so that different Editors can have different playback states if they also have different contexts. Signals on the Playback class can be used to be notified when the playback frame range changes or when playback starts or stops.

This also fixes the following bugs in the Timeline class :

- Wraparound during playback would remove the fractional part of the frame number.
- Entering a value in the frame field which was outside the frame range would make it impossible to subsequently enter a fractional frame number.
- Changing the frame number via the numeric field didn't update until focus left the field.
Optimised SceneHierarchy update for improved playback performance.

When I say optimised, I mean that SceneHierarchy update is now disabled completely during playback. It's incredibly unlikely that the hierarchy changes with time (although it is allowed), and during playback the user is far more interested in the contents of the Viewer than of the SceneHierarchy, so wasting time updating it can't be justified. A final update it performed when playback stopped, in case the hierarchy has changed in some way.

This change alone reduces the time to playback a 20 frame test animation by 75%. The improvement should be even greater in conjunction with the SceneReader optimisations currently being reviewed, because once they are merged, SceneHierarchy update would represent an even greater proportion of playback processing.
Merge pull request #668 from johnhaddon/playback

SceneHierarchy playback optimisations