[Ronseal](https://en.wikipedia.org/wiki/Does_exactly_what_it_says_on_the_tin).
Currently, to unit test asynchronous actions [we intercept all calls to `wait` and return our own promises](https://github.com/wikimedia/mediawiki-extensions-Popups/blob/master/tests/node-qunit/actions.test.js#L62-L85) that [[ https://github.com/wikimedia/mediawiki-extensions-Popups/blob/master/tests/node-qunit/actions.test.js#L161-L172 | we then manipulate directly ]]. [[ https://github.com/wikimedia/mediawiki-extensions-Popups/blob/master/tests/node-qunit/actions.test.js#L366-L368 | This approach has issues ]] as any call to `jQuery.Promise#then` et. al. returns a new instance of `jQuery.Promise`. If we were to return the promises from the action thunks, then this wouldn't be the case.
== AC
[] The `linkDwell` thunk returns a promise.
[] The `abandon` thunk returns a promise.
[] The unit tests for the actions are updated to
[] Unnecessary `setTimeout(..., 0)` and `wait(0)` in the tests are removed
[] Unnecessary promise/deferreds coordination is removed in favor of just waiting for the promises from the functions to finish
== Bonus AC
[] We can also remove the wait(0) in some of the tests since the action creators will return a promise that we can wait to, instead of having to hackily wait till next tick to check the assertions.
[] Can we remove .fail in actions.js#L123?