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)
> It's not a silent failure. The file system drivers are free to return ENOSYS but the default way of handling it is to use a global permission mask and disregard processes attempting to change it.

I dunno about a typical unix FS driver, but if we look at msvcrt implementation of chmod, it sets the read-only attribute = !S_IWUSR and ignores the rest of mode flags, returning **0** (i.e. "no error").  Actually, MS and MINGW headers don't even define the "group" and "other" mode flags, but since Rust's does not use bindgen, you'd never know that.

>>  That it fails in the same way for FAT32 on Linux does not make it okay

>  It's how it works across platforms, not just Linux. Again, I suggest thinking about why it's done that way 

My guess would be to keep code, that doesn't expect such file systems, running?

> and what would happen if it returned errors.

I suppose the caller would know that `chmod` didn't do anything?  Of course if the goal is to keep old code running, this may be seen as counter-productive... but on the flip side:

> Can you explain a scenario where you think this design would cause an error?

How about "a program creates a file, removes access permissions from everybody but the user, then proceeds to write some sensitive information (e.g. a private key) into it"?  Sure, it might work ok in your scenario with a flash drive, but what if the directory is publicly readable?

> I don't see how it would make any sense to set the DOS file attributes or Windows ACLs via the same type that's used on POSIX platforms for the bitflag-based permissions.

So why do you want this API to be declared portable then?  On Windows it would be at best useless (if it returns errors) and at worst dangerous (if it doesn't).