Debugger snapshots

### 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
* That trace bug is fixed!
* **It feels much faster**

#### While you review:

* I'll see if there's a better number instead of 100 to choose.
The line that uses this is:
`snapshots = snapshots.slice(0, lastSnapshotPosition);`

`[0,1,2,3].slice(0, 2) => [0, 1]`. The end index is excluded. So suppose we're on position 576 and want to continue. We need to keep all the snapshots between the initial one and the 5th (which is the checkpoint for 500-599). So, we want `snapshots.slice(0,6)`. We get `6` from `Math.ceil(576 / 100)`.