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.