Timekeeper cleanup - Don't Merge yet

So these changes should make the time keeper and sound system a bit more solid.

There's still some work to do
* This uses the Web Audio API, so there's not yet support for IE
* The syncing with the pulse client might not be up to scratch, it needs more testing.

There's also a question about how the BPM updating should work. Currently it works fine, but it will update at the next quarter note (i.e. every run of the beatLoop callback). This might not be the desired behaviour, so we should figure out what is