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.

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 
https://github.com/zsxwing/RxScala/commit/96f50d242b250949a6f03b90f426283103ed02a9