Fix the fails() by repurposing it as an assertion

The recent move to bluebird broke the way we were adding `.fails()` to the Promise prototype.  This reworks `.fails()` as a function that we can pass a promise to, which fixes a couple of failing tests.