Fixed issue #417

```java
public static void main(String[] args) {
    System.out.println("started");
    System.out.println(Observable.from(1).observeOn(Schedulers.threadPoolForComputation())
        .map(f).toBlockingObservable().single());
    System.out.println("done");
}
```

This issue in #417 is because current `map` implementation violates the design guild:
> 6.4. Protect calls to user code from within an operator

Now current `map` does not handle the error from the `func` param which may be user codes. When the thread pool scheduler is involved, the error from `func` will throw to the outside and be handled by `java.util.concurrent.FutureTask`. The error will be dropped so the observer will not see it.

This PR used `SafeObserver` to protect `map` from user codes.