Adding halfway decent stdin/stdout/stderr emulation and ImageData Buffer backend.

The ImageData Buffer backend uses an ImageData object associated with an HTML5 canvas to store binary data. In modern browsers, these are backed by ArrayBuffers. But in IE9, which doesn't support ArrayBuffers, it is backed by the deprecated CanvasPixelArray -- which is equivalent in functionality to a UInt8ClampedArray in modern browsers.

This is the best way to represent binary data in IE9 because it is:
* Fast. Each index in the array is a byte, and it is zeroed when it is allocated.
* Compact. While a regular array of numbers might be represented in memory as an array of 32-bit ints or 64-bit doubles, the CanvasPixelArray will always be an array of bytes.