Refactor Subscriber to support backpressure when using lift and bug fixes

I found `tail` and `toXXX` didn't work after adding backpressure. To solve it, I have to change `Subscriber` to `abstract class` so that `Subscriber`s can be chained and call `request` properly.
> I'm a bit confused about the RxScala/RxJava interaction in Subscriber/Observer, it doesn't look like a very systematic approach to me any more. Did you have something systematic in mind when you made this PR? Maybe you could add some docs, so that it becomes clear why it must be this way.

I plan to change `Observer`. However, I don't want to touch `Observer` in this PR. In your original design, why did you create `new Subscriber(rx.Subscriber(..))` instead of `new Subscriber` without a `rx.Subscriber` like this PR?



> And regarding this apply signature: Why does it take a Subscriber and onNext/onError/onCompleted lambdas? That makes no sense to me. According to git blame, this was introduced by you in commit  zsxwing@96f50d2

I added this method because it's necessary for `lift` operator. When using `lift`, we need to pass the child `Subscriber` to the new `Subscriber` to chain the `Subscription`s, e.g., the `tail` implementation:
```scala
   def tail: Observable[T] = {
     lift {
       (subscriber: Subscriber[T]) => {
        var isFirst = true
        Subscriber[T](
          subscriber,
          (v: T) => if(isFirst) isFirst = false else subscriber.onNext(v),
          e => subscriber.onError(e),
          () => if(isFirst) subscriber.onError(new UnsupportedOperationException("tail of empty Observable")) else subscriber.onCompleted
        )
       }
     }
   }
```
However, I agree we won't need it any more since I add the constructor "Subscriber(Subscriber)" in this PR.