feat($q): Adds a context object to the promise chain callbacks.

Request Type: feature

Component(s): $q

Impact: medium

Complexity: small

**Detailed Description:**

Too many times I'm forced to write code like this:

```javascript
return myThing.go().then(
    angular.bind(this, this.success_),
    angular.bind(this, this.error_),
    angular.bind(this, this.progress_)).
  catch(angular.bind(this, this.catch_)).
  finally(angular.bind(this, this.finally_));
```

Instead, it would be nice if a context could be added to the promise chain, resulting in:

```javascript
return myThing.go().context(this).
  then(this.success_, this.error_, this.progress_).
  catch(this.catch_).
  finally(this.finally_);
```

Removing the context (if returning a promise as above) would just be:

```javascript
return myThing.go().context(this).
  then(this.success_, this.error_, this.progress_).context();
```