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.
Okay, gotcha. I think the naming here is misleading then. It's not *really* the last snapshot position. It's one more than that. It seems small, but this feels like the kind of thing that's easy to misunderstand and accidentally "fix". I'd be inclined to do one of these:

  1. inline this in the call to `slice`
  2. use `floor` and add a + 1 in `slice`

Do either of those seem reasonable?