Remove liaison/Observable dependency.

This will pull in less code and should also be faster, since there's no intermediate
change records array.

In the future, we could modify Stateful to leverage native Object.observe() if it's
present, by not setting up custom setters for each property, but not sure if it's worth it.

This change also uses a single global timer, rather than one per StatfulPathObserver or Stateful
instance.  Ideally this will stop the browser from redrawing until all widgets have been updated.
Observing: don't make refreshProperties() trigger another call to itself
Observing: extend Widget