RFC: IO simplification

This RFC proposes a significant simplification to the I/O stack distributed with
Rust. It proposes to move green threading into an external Cargo package, and
instead weld `std::io` directly to the native threading model.

The `std::io` module will remain completely cross-platform.

[Rendered](https://github.com/aturon/rfcs/blob/io-simplification/active/0000-io-simplification.md)
> It's actually impossible to write correct code in many cases without non-blocking sockets and AIO. For example, leaking tasks when an operation blocks is awful and there's no way to do cancellation.

Totally agree. This has been a pain point for us at Tilde.

> It's not possible to write software based on events in Rust today (without writing a new I/O / concurrency library)

Truth.

> and it's not ever going to be possible to do it in a simple and concise way without having language support.

I don't agree. I assume you're talking about coroutines or async/await? I think macros can help us evolve a good concise solution to this problem, just as they were used in JavaScript to prototype async/await. I could be wrong, but I think that shallow generators could be implemented today in terms of the existing semantics (with some unsafe code).

> The desire for a 1.0 release shouldn't be an excuse to provide sub-standard APIs. It's better to do nothing at all and leave it to be solved down the road with generators or async/await than it is to shoehorn a half-baked idea in today.

I agree that we should err on the side of caution due to Semver. We're going to be stuck with anything we ship with 1.0 for a long time, so it's better to ship conservatively than to overreach.