fail = function(b) {
                    b = b.slice(0, b.indexOf(null));
                    var err = Error(b.toString());
                    err.name = "TruncatedError";
                    err['bytes'] = b;
                    throw err;
                }
Decodes UTF8 bytes to UTF8 code points.
@param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
 are no more bytes left.
@param {!function(number)} dst Code points destination as a function successively called with each decoded code point.
@throws {RangeError} If a starting byte is invalid in UTF8
@throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the
 remaining bytes.