Error Handling Improvements - User Provided Observers/Functions

Improve error handling as per discussion in issue https://github.com/Netflix/RxJava/issues/216

This is by no means exhaustive in the search for places needing this protection but gets the most obvious ones entering via `subscribe` and `forEach`.

The intention is to protect against exceptions being thrown and ensure onNext/onError/onCompleted contract compliance.