Fixing the generics for merge and lift

I've tracked down to two problems #858 

The first is that lift wasn't quite right. I changed the lift argument from `Operator<R, T>` to `Operator<? extends R, ? super T>`.  Unfortunately Java won't let us hide that away in the `Operator` class so we have to redeclare that everywhere in the debug hooks but it's still better than the alternative of having to use the full `Func1<? extends Subscriber<? super R>, ? super Subscriber<? super T>>` everywhere.

The second problem was in the return type of merge `Observable<T>`.  Because of operators like `merge(Observable<? extends T> t1, Observable<? extends T> t2)` the only thing that can be said for the return type is that it is also `Observable<? extends T>` but at the moment it is returning `Observable<T>`.

This pull request changes all of them and leads to some silly return values like
```
Observable<String> a, b;
Observable<? extends String> x = merge(a, b);
```