Add a Promise#fails function to check for an expected failure

Fixes #26 

This implementation feels a little awkward to me, because of the way `.catch()` and `.then()` interact.  I found I needed to wrap the expected rejection function with one that tracks whether it ran, and if so, we know the expected failure occurred.  If there's a cleaner way to do this, I'd be interested to learn about it.