Replace when with bluebird

Currently has two commits, one for the bulk of the tests conversion and one for the rest.  Will squash if/when this is ready.
It seems to work fine when tested.  If you're returning a value out of a promise you shouldn't need to wrap it in another promise, as the existing promise will handle that.