refactor($q): make $q Promises A+ v1.1 compilant

Refactor to make $q Promises A+ v1.1 compilant
redefining the prototype entirely means we lose buildins like the `constructor` property, which by default is not enumerable --- to fake that, we'd have to manually define the property as not enumerable --- it doesn't make a huge difference, but it's kind of unnecessary to break that.