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 assume you changed from catch to caught for a good reason, but I'm not familiar with caught.  Why switch?