update dematerialize so can chain correctly

Just noticed this when I actually had to chain it.

```java
Observable<File> saveResult = ....;
```

current:
```java
Observable<Notification<File>> a = saveResult.materialize().dematerialize();
```

expected:
```java
Observable<File> a = saveResult.materialize().dematerialize();
```

here is what is happening

```java
Observable<File> x = saveResult;
Observable<Notification<File>> y = x.materialize();
Observable<Notification<File>> currentResult = y.dematerialize();
Observable<File> expectedResult = Observable.dematerialize(y);
```

workaround is to use static method to get the expected result.

With this change you can chain correctly. Added unit test.

```java
Observable<Integer> obs = Observable.just(1);
Observable<Integer> chained = obs.materialize().dematerialize();
```

This will be a breaking change. But I think this is the expected way.