Use distinguishable wrapper for checked exceptions

The operations (forEach(), next(), mostRecent(), toIterable(), etc.) that throw exceptions that were passed through Observer.onError() now wrap checked exceptions in a (newly created) ObservedException. This allows a catch block to distingush these exceptions from RuntimeExceptions that came through the Observable.