Preparations for refactoring I/O code.

Adds a table of I/O operations, and starts preparing MVMOSHandle for
working in this way. No functional changes yet.
Start moving sync file I/O to new factoring.

Goes far enough to pass NQP tests and Rakudo sanity tests, though some
pieces are left to move over.
Move the rest of the file I/O into the new place.

Except the logic in MVM_file_read_fhs, which is sufficiently wrong to
just toss and do over.
Refactor file handle case of standard streams.
Clean up most of old file I/O bits.

Still can't quite get rid of fd in MVMOSHandle, as a few more things
need moving first.
Move truncate to new scheme.
Move file lock/unlock code.
Final steps of moving file I/O out.

With this, it's all now encapsulated in syncfile.c, and detangled from
everything else.
Add decode stream mechanism for bytes => chars.

We'll use this for the various kinds of IO we do, allowing us to get
buffers of whatever size in, potentially with characters being over
buffer boundaries, and get chars out correctly. Not perfect, still
some optimization and cleanups to go and no doubt some bugs to find.
Also, only UTF-8 supports decode stream so far.
Switch synchronous I/O over to use decode stream.
Correct Latin-1; add Windows-1252.

The Latin-1 implementation we had actually did Windows-1252. We're not
HTML 5, so should actually Latin-1 when asked to. Keep the original
code around as a Windows-1252 implementation.
Implement streaming decode for Latin-1 and ASCII.
Assorted DecodeStream fixes and tweaks.

With this, we're back to no regressed spectests in Rakudo for this
branch.
Toss an unused constant.
Toss code too wrong to have ever worked.
Shuffle bytes reads over to DecodeStream too.

This means we won't get out of sync if doing mixed string/bytes reads,
but additionally lets us remove another place we directly call libuv
to read data.
Correct comments.
Missing 'static'.
Add syncstream, and move TTY over to it.

A syncstream provides synchronous access to a libuv stream, using a
MoarVM DecodeStream (like syncfile does) to handle bytes -> chars. At
least on Windows, things like the REPL and piping files into Rakudo
work out. Note that this breaks pipes; they still need updating to the
new scheme.
Move openpipe over to the new IO scheme.

With this, we're back (at least on Win32) to no spectest regressions
and passing NQP tests.