Better handling of observer errors

This fixes #603.

This also should have some way for users to control how to deal with errors. Here are some options:

* Handle errors in observers
* Set a global option
* Option in observer()