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.
See also my comment on commit https://github.com/ReactiveX/RxScala/commit/fd6ec8a6b058a9ed5e90cbcb0e337f8ce023acc8.