http://jsfiddle.net/XSGub/56/ — вот, вынес что мог в прототипы. Фигня в том, что когда вызывается runNext, он выполняется в контексте window. Заставлять писать кого-то runNext.call(this) — неправильно. A Function.prototype.bind слишком крупный, если хотим сделать кроссбраузерно.