Guard against fake timers blocking promise resolution

Fake timers are commonly used for testing time related tasks. Next tick
promise resolution can be held up if fake timers are employed until the
timer is advanced. We can avoid this by hoisting a reference to
setTimeout before fake timers are installed. Promise resolution will no
longer be delayed by fake timers.