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)
Why can't we simply use `Vec<u16>` on Windows?  This is the most natural solution:

```rust
#[cfg(windows)]
mod imp {
    type Buf = Vec<u16>,
    type Slice = [u16];
}
```

When a `Wtf8Buf` object originates from an ill-formed UTF-16 string, `into_string()` returns `Err` and `into_string_lossy()` produces a `String` object containing `U+FFFD REPLACEMENT CHARACTER`s.  We can do the same with `Vec<u16>`.

So the only benefit of `Wtf8Buf` is that English speakers who only use ASCII range of Unicode have a good chance of saving a little bit of memory.  On the other hand, every operation on `Wtf8Buf` is much more expensive than that on `Vec<u16>`; see  [`next_surrogate()`](https://github.com/SimonSapin/rust-wtf8/blob/master/src/lib.rs#L621) and [`code_point_range_at()`](https://github.com/SimonSapin/rust-wtf8/blob/master/src/not_quite_std.rs#L119) for example.

I don't think we should try to reduce small amount of memory consumption with THAT amount of effort.