Extract playing logic into model.

This allows other views to listen in to state changes, as well
as be able to trigger their own events (controls.js, for example)