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