changed the observer api

* observe() now returns scope instead of observer object
* added stopObserving() for removing an observer
* better clean up on scope stop