Decouple observedSet from PathObservers

The basic idea here is that the observedSet is basically maintaining a write-barrier on all objects which are deps for a set of Paths. If any changes, then all paths must be checked.

However, when paths are dirty-checked (because of deliver() or discardChanges()), it's not necessary to flush pending records.

Because any dependent object changing will only ever cause the paths to be checked for new values, false positives are filtered out.

This is a precursor to allowing multiple separate observers to use the same observedSet as a write-barrier, which will allow sharing of observation of common objects (Object.proto, etc...).
R=arv
BUG=

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