feat($rootScope): allow for a scope to have partialDigest

When a scope has partialDigest, $apply-ing the scope
only triggers the dirty checking in that scope and its descendants

BREAKING CHANGE:
Scope.$apply now requires its `this` to be a given scope.

Replace any calls similar to
```js
expect($scope.$apply).toThrow('...')
```
with
```js
expect(function () {
  $scope.$apply();
}).toThrow('...');
```

Also, with the introduction of partialDigest,
`Scope.$new` now takes an object for its options instead of a boolean.

Before:

```js
$scope.$new(true);
```

After:

```js
$scope.$new({isolate: true});
```

Passing a parameter is still optional
feat($compile): add partialDigest property in directive definition

A directive asking for a child or isolated scope can now ask
for that scope to have partialDigest, making any digest triggered
from inside the directive only do dirty-checking for that scope
and its descendants.