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.

Related to #6427

(This doesn't do what was requested in #6427, however I feel it's a better
solution as it looks similar to the newer native Promise implementations becoming common
in the web platform).
nah, it should come first IMO. Supporting "all the methods" would just mean adding an extra parameter to the resolver function.

Since this is basically what Promise APIs look like these days, it's actually saner to put this up front, with the older style further down --- and the older style should probably be eventually deprecated