Use a value, not owned pointer in Observable

Rust only requires ownership for dynamically sized types (traits and
vectors).
Rename 'onValue' to 'watch'

It's a better name and 'onValue' isn't Rustic anyways.
Add an 'unwatch' method to Observable

Allows for removing an observer.