Debugger checkpoints

### Features:

* Saves the runtime state every 100 events.
* Stepping forward works as usual
* Stepping back goes to the previous checkpoint and works back up to the current event location
* Hotswapping regenerates these checkpoints with the new code
* **It feels much faster**


#### Notes:
* If you have a lot of events, hotswapping will still take some time. The debugger has to step through all the events and make new checkpoints.
* Should we merge this into a feature branch of the debugger and then merge that into `debugger`?

 
#### Bugs:
* If you send a lot of keyboard events, pause, scrub, and continue, you will lose anywhere from 2-100 traced nodes. This is turning out to be harder than I thought to fix. 

I suspect the fix won't be big so let's review this code now. When I have the fix then we can check that diff and merge this in.
Prefer `Math.floor` or something. This is a confusing way to do that and I'm not sure I am correct that floor is even equivalent.