The good: this works (see also http://stackoverflow.com/a/23984472/275581, angular/angular.js#6697, http://plnkr.co/edit/ggMzDwnkzMOc0MccdVEu?p=preview). You'll have Bluebird promises that interact with the digest cycle and even internal Angular code that thinks it's using $q will actually be using Bluebird.
The bad: you'll probably trip over a bunch of places where your own code, or library code like ui-router, thinks it's ok to create rejected promises and never attach error handlers, because $q is silent about that and Bluebird complains about it. You did know that $timeout.cancel()
rejects a promise and you always catch that rejection, right?
Indeed it seems to work, nice! Any ides about fixing the ui-router verbosity?