Agree that it cannot be null.

Calls to elapseBlocking from timers/microtasks called during elapse, can cause the current fake time to surpass elapsingTo, in which case those timers expiring all the way up to the current time need to be included.  Otherwise, the state of the timers and the clock will be out of sync on the return from elapse, and it would be surprising to have a bunch of timers called on the next call to say `elapse(Duration.ZERO)`.

So I now update _elapsingTo in elapseBlocking when _elapsingTo is surpassed by the clock.