Use `Function.prototype.apply` to call `setTimeout` on older IE

In older IE, the host object like a `setTimeout` has no methods that
defined in `Function.prototype`.
Fix test for setTimeout with negative wait for older IE

The assignment to  `window.setTimeout` doesn's equal to `setTimeout`.
And globally assignment is not allowed by jshint.
So `eval` is required to overwrite `setTimeout`.