feat(scope): early exit of digest loop

At any given time there are many watchers in the 
system. When watcher fires it can change the 
model. This change may now cause an earlier watch 
to be eligible for firing. For this reason the 
watches need to be re-checked several times, until 
no watchers fire. Currently the system loops until 
there is a clean run through the loop. This means 
that every watch needs to run at least twice. A 
better way is to remember the last fired watch, 
and then exit the loop early when the the last 
watch has been reached again.
chore(print): remove left-over print() statements
chore(scope): explicitly declare variables in scope digest
feat(probe): Access injector, scope, directives from REPL

Add global methods to make it easier to debug Angular application from
the browser's REPL, unit or end-to-end tests.

Closes #305
chore(gitignore) add dart2js temp files to .gitignore