Test runner no longer trips over fake timers (
8199f9c)
The test runner now uses clearTimeout() during timeout cleanup instead of calling timer[SymbolDispose](), which avoids breaking when timer shims return non-disposable objects. A new regression test covers the fake-timers case so timeout cleanup keeps working with Sinon-style implementations.


