feat($q): finally callback is called with result arguments

before this commit, `finally` callback was called with no arguments and couldn't know whether the promise was resolved or rejected and why.

Closes #9246
1) an alternative implementation can be `always: this.then(callback, callback)` but then the callback can control the reject/resolve chain, which is strange since the callback doesn't even know if this is a reject or resolve.
2) we could allow this callback to return a promise in order to delay the resolve/reject of the chained promise, but still not effect the final result, similar to what `finally` does.