Remove WindowlessMetadataExtractor
test(ng-mousewheel): fix ng-mousewheel test
fix(parser): Add caching to the dynamic parser.

This change cut memory allocations for some actions in the Todo
demo app by 50%.
chore(perf): reflect speed test
feat(scope): Implement lazy scope digest
feat(repeater): implement shallow repeater
chore(npm): update karma-junit-reporter version
feat(repeater): implement shallow repeater
feat(scope): implement scope.$disabled
fix(parser): Add ternary support to the static parser
fix(static parser): Allow newlines in expressions.

Closes #297
chore: ignore .DS_Store file
fix(filters): Fix filters in the code-gen parser
feat(spec): Do not fall-thru to the dynamic parser in the static parser spec
chore(codegen): Factored reserved keyword logic into a library
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.
chore(print): remove left-over print() statements