fix($q) allow $q to work well with decorators

Re-work the $q service a bit so that rather than invoking functions stored in a closure internally ( defer, reject, etc.. ), it uses the methods of the object that's returned so that when it's overridden or modified in a decorator, the desired behavior is maintained throughout

Fixes #3659