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)
@nagisa In C, we can use `fseeko(fp, (off_t)+10, SEEK_END)` to extend a file by 10 bytes (to be more precise, the file is extended at the moment of writing to it past EOF.)  I expect `FromEnd(10)` to work in the same way.  So I need `FromEnd(-10)` as well for moving to 10 bytes before EOF.

```c
#define _POSIX_C_SOURCE 200112L

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>

enum { BUFLEN = 1024 };

int main(void) {
    char buf[BUFLEN];
    FILE *fp;
    struct timespec ts;

    if (clock_gettime(CLOCK_REALTIME, &ts)) {
        perror("clock_gettime(3)");
        abort();
    }

    snprintf(buf, sizeof buf, "/tmp/new-file-%lld.dat",
        1000 * 1000 * 1000 * (long long)ts.tv_sec + (long long)ts.tv_nsec);
    printf("Opening [%s]...\n", buf);
    if (NULL == (fp = fopen(buf, "w"))) {
        perror("fopen(3)");
        abort();
    }

    printf("Seeking...\n");
    if (fseeko(fp, (off_t)10, SEEK_END)) {
        perror("fseeko(3)");
        abort();
    }

    printf("Writing...\n");
    if (EOF == fputc('X', fp)) {
        perror("fputc(3)");
        abort();
    }

    printf("Closing...\n");
    if (fclose(fp)) {
        perror("fclose(3)");
        abort();
    }

    printf("Bye\n");
    return 0;
}
```

```
$ ./seek_past_eof
Opening [/tmp/new-file-1418813227858292699.dat]...
Seeking...
Writing...
Closing...
Bye
$ stat new-file-1418813227858292699.dat
  File: `new-file-1418813227858292699.dat'
  Size: 11              Blocks: 8          IO Block: 4096   通常ファイル
Device: 11h/17d Inode: 14821968    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ nodakai)   Gid: ( 1000/ nodakai)
Access: 2014-12-17 18:47:07.854257171 +0800
Modify: 2014-12-17 18:47:07.854257171 +0800
Change: 2014-12-17 18:47:07.854257171 +0800
 Birth: -
$ xxd new-file-1418813227858292699.dat
0000000: 0000 0000 0000 0000 0000 58              ..........X

```