Switch promises from Q to Bluebird

While Q is a great library for Promises, [Bluebird](https://github.com/petkaantonov/bluebird) promises are [almost as fast as callbacks](https://github.com/petkaantonov/bluebird/blob/master/benchmark/stats/latest.md), and even faster than callbacks when using generators, while Q tends to take up a lot of extra memory and runs much slower. Bluebird also has much more [detailed stack traces](https://github.com/petkaantonov/bluebird#how-do-long-stack-traces-differ-from-eg-q).

**Changes:**
- Replace Q with [Bluebird](https://github.com/petkaantonov/bluebird)
- Replace `.fail` with `.catch`