Refactor to support Observable interface

This patch formalizes the Observable interface. This is part of making the Node.bind() take an Observable, rather than model & path. The main implications to observe-js are:

-Path/CompoundPath/Object/ArrayObserver all implement the Observable interface
-PathObserver and CompoundObserver no longer have a .value property
-PathObserver and CompoundObserver no longer have optional transform functions. These are now concerns of the ObserverTransform.

R=arv@chromium.org, arv
BUG=

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