feat(scope): add $watchSet API

Allows watching a set of expressions. If any one expression changes
then the reaction function fires.
doc(scope): add $watch / $watchCollection documentation
feat(interpolate): use $watchSet to remove memory pressure
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.