chore(Scope): short-circuit after dirty-checking last dirty watcher

Stop dirty-checking during $digest after the last dirty watcher has been re-checked.

This prevents unneeded re-checking of the remaining watchers (They were already
checked in the previous iteration), bringing a substantial performance improvement
to the average case run time of $digest.

Closes #5272
Closes #5287
Merge branch 'master' of https://github.com/angular/angular.js