feat($q): add streamlined ES6-style interface for using $q

This potentially helps lead the way towards a more performant fly-weight implementation, as discussed
earlier in the year. Using a constructor means we can put things in the prototype chain, and essentially
treat $q as a Promise class, and reuse methods as appropriate.

Short of that, I feel this style is slightly more convenient and streamlined, compared with the older
API.

Closes #8311
Closes #6427 (I know it's not really the solution asked for in #6427, sorry!)
WIP make Q more bloobirdy
WIP subset of Bluebird functionality / implementation

Things remaining:

1. Make this compatible with the original $q implementation

2. Sort out the error logging story (make use of Bluebird's machinery for this + $exceptionHandler by default)

3. Remove more bits that aren't needed for Angular.
WIP bluebird
WIP add promises-aplus-test-adapter-prefix.js
MORE WIP
WIP fix $compile tests
WIP make it a tiny bit faster, maybe...