Refactor test suite

Wanted to do this as part of the process of diagnosing tgriesser/bookshelf#310. Changes include:

* Swapping Q for Bluebird to take advantage of Bluebird's `onPossiblyUnhandledRejection` feature
* Updating to Mocha 1.8.x which has native promise support — you can return a promise to make a test async rather than needing to call the test callback
* Using Chai and Sinon (+ plugins) for more expressive and specific assertions
* General cleanup of tests so that each test covers more specific functionality