RFC: io and os reform

This RFC proposes a significant redesign of the `std::io` and `std::os` modules
in preparation for API stabilization. The specific problems addressed by the
redesign are given in the Problems section below, and the key ideas of the
design are given in Vision for IO.

[Rendered](https://github.com/aturon/rfcs/blob/io-os-reform/text/0000-io-os-reform.md)
@thestinger: do you have a better suggestion? The only thing more optimal I can think of that's thread safe would be:

```
fn with_vars<T>(f: |EnvIterator| -> T) -> T { ... }
```

Where `EnvIterator` is an `Iterator<(OsStrBuf, OsStrBuf)>`. Since we have the environment locked inside this closure, we could get away with not allocating the key-value pairs, but instead wrap the raw `*u8`s. That could work if someone really needs the performance.

Or we have `vars` return an `EnvIterator` that internally holds the environment lock, and frees it on drop. On the plus side, no closures, on the minus sign, users would have to be good about wrapping `var()` calls in a scope, or they could inadvertently block everyone else from accessing the environment. I could see this happening fairly frequently in `main`, unfortunately.