feat($rootScope): allow $watchGroup to be passed an object

in case an object is passed instead of an array, the keys are the expressions to watch and the values are booleans indicating if this watched expression requires object equality check.
@petebacondarwin I think that @shahata means this. If you do
```js
$scope.$watchGroup(['::foo', 'bar'], function callback() {...});
```

Say that after some number of digest cycles, `foo` is stable and points to `{foo: 'foo'}`

If in a future cycle `bar` changes it's value and so does `foo` (and in the case of `foo`, the change is done on the same instance), then `callback` receives the updated `foo`

If this is the issue reported, then this is an expected side-effect. The reason being that `callback` must receive the reference to the real object in case `callback` wants to make any modification to it