This patch makes a set of related changes:

1) Ensure that deliver fully flushes dependencies. This is required so that a computedProperty can ensure that it synchronously returns the correct value.

The main change is that PathObservers (normal and Compound) must dirtyCheck even in Object.observe when deliver() is called. Dirty-checking touches all dependent values -- some of which may be computed properties, which, in turn flush their dependencies.

2 ) Remove getValue from Observable interface. Now that deliver() ensure transitive flushing, synchronous getValue is no longer need

3) Observer.defineProperty -> Observer.defineComputedProperty for clarity

4) ArrayReduction now implements the Observable interface and removes ArrayReduction.defineProperty, in favor of Observer.defineComputedProperty

R=arv
BUG=

Review URL: https://codereview.appspot.com/44050049