Refactor/cleanup

This patch makes the code acknowledge that Object/ArrayObservers are fairly different from Path/CompoundObservers. In particular, they have different behavior around deliver/discardChanges and syncing after checking.

R=arv
BUG=

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