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.
The debugger worked fine on real time without checkpointing (since the state was rebuilt every backwards scrub event). This change is necessary for checkpoints but not for the previous version of the debugger.