Put Promise.delay on our Dispatcher and have cancel stop the timer

# CHANGE SUMMARY
Promise.delay used setTimeout directly and never cancelled it. Now we pass Bluebird a property bag of the two functions it needs. I didn't pass our Dispatcher directly because I didn't want Bluebird to hold onto a single Dispatcher instance when we mock it so often.

# CHANGE DETAILS
A lot of the changes here actually come from me running jshint on code that we had previously modified. Lots of lines were too long and jshint doesn't like using the keyword 'catch' as a function (caught() does the same thing).

Also, Nate's recent change to our fork seems to have broken Bluebird's tests. I filed HAD-4335 about that. 

# PICTURE  
![](http://media.giphy.com/media/PGwgrYW4YWveM/giphy.gif)
I mentioned it up above. jshint doesn't like "catch" because it's a keyword. I think something might have been screwed up with my jshint configuration... that or no one runs jshint on BB.

catch and caught are the same function and BB provides both to let you work around linters.