add $watch(obj, exp, listener) which uses Object.observe
lexer creates a list of identifier paths
compound expression observing
add deep equality logic to $watch
do not use $rootScope in $watch tests
watcher disposal via functions returned by $watch()
extract $WatchProvider.WatchManager
fix one-time listener registration
fix $WatchProvider.WatchManager#watch() signature
$watch listener signature is (old_value, new_value, watched_object)
add $watch.subscribe(subscriber())
test passing of constant expressions to $watch()
delegate exceptions from $watch to $exceptionHandler
test $watch listener call ordering
use Object.observe() for delivery scheduling instead of setTimeout()
impose a limit of 100 recursive changes to objects watched via $watch()
test watcher listener and $watch subscriber call order
add "jqliteObserved" karma configuration for testing in Chrome with native Object.observe available
test watcher listener/subscriber disposal functions returned by $watch
log more info during $watch delivery iterations