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?
Ugh - I haven't been able to get this to work at all, it never loads the controllers or views into the template. Here's my implementation (coffescript) attached. Any ideas what I'm missing here? Angular 1.4.5