I want to revisit this for a future PR: this is true for both the new code and the old, but as it stands, we iterate through the `timers` hash while adding to and deleting from it, which seems like all sorts of unhealthy. I'd had some code where we grabbed a ref to timers and then reset timers to {}, but it seemed to risky to be a part of this PR, and there's some corner cases, such as canceling timers, scheduleOnce, etc., that might break depending on whether they're called from within a run loop, or whether the timers in the hash are run.later timers vs. scheduleOnce timers in the same runloop, etc etc etc