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)
I [recently changed](https://github.com/rust-lang/rust/pull/19741) `from_utf8` to return `Result<&str, Utf8Error>`, so this can probably pick up that error. I suspect this will probably just continue to return the same value as `str::from_utf8`.

I do think that in general `Option` should only be used where `None` is a normal value, not an error (to use with `try!` as you pointed out). In the second pass of stabilization we're going to look closely at all this.