Just because something requires thought does not mean we hide it. We just need to make things clear rather than confusing and nuanced.

Also, if the `Subscriber` is that hard to implement we have failed. See my comment at https://github.com/reactive-streams/reactive-streams/pull/37#discussion_r11956787 for how the `Subscriber` can be simplified. The `Subscription` is the more complicated item to implement, and if people are going to do so they need to comply with the contract. 

A `Subscriber` should be dead simple to implement, and it really is.

If we make it the responsibility of `Subscription.request` to be async, then a `Subscriber` can directly invoke `Subscription.request` without event loops, trampolines etc which is currently the most nuanced complication of the spec.