some virtualise timer changes/fixes:
- we shouldn't worry about t0 in the future (a value of t0 > now represents
a value in the past)
- we need to worry about the underlying timer having fired (but not reached)
us yet when we try and set the timer (if we don't, we can handle a past
event as representing a future event); see the revised version of
executeTimersTask for details
- we track when timers are changed during execution of executeTimers