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)
@alexcrichton

> In that sense I think it's a bit of a performance optimization

I don't quite understand what kind of performance gain you expect.

1. Reducing the number of `read()`-like calls **against** `BufferedReader`, or
2. reducing the number of `read()` calls **by** `BufferedReader` against the underlying "real" stream such as `File` or `TcpStream`?

The former will only save negligible number of nanoseconds (if any) because `BufferedReader::read()` etc. are memory operations in user space.  The latter is a matter of tuning internal parameters of `BufferedReader`.

Did I miss anything?  My understanding of its behavior is:

```rust
let mut b = [0u8, .. 30];
let res = r.read_at_least(10, b.slice_to_mut(20));
```

`res` can be any of `Ok(10)`, `Ok(15)`, `Ok(20)`, or `Err(PartialResult(5, EndOfFile))`.  It will be tedious to change how to cook the content of `b` depending on the `Ok()` value.

I can't think of any practical usages of `read_at_least()`.  @alexcrichton How would you use it in, say, your `tar` code?