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)
Is it worthwhile trying to "help" the user use the length read? It feels kind of easy for the user to just write `try!(rdr.read(&mut buf))` and forget to do anything with the returned length. The options I can think of are:

* Change the signature to `fn read(&mut self, buf: &mut [u8]) -> Result<&mut [u8], Err>`, where the returned slice is sized to the length read. This might have some usability concerns unless #396 is implemented.
* For readers that can return partial reads, change the signature to fn read(&mut self, buf: &mut [u8]) -> Result<(), Err>`, and add a `PartialRead(uint)`-esque error that people need to handle. Not sure how that could work with an associated error type though.