Copy consumes a xml.TokenReader and writes its tokens to a TokenWriter until
either io.EOF is reached on src or an error occurs.
It returns the number of tokens copied and the first error encountered while
copying, if any.
If an error is returned by the reader or writer, copy returns it immediately.
Since Copy is defined as consuming the stream until the end, io.EOF is not
returned.

If src implements the WriterTo interface, the copy is implemented by calling
src.WriteTo(dst). Otherwise, if dst implements the ReaderFrom interface, the
copy is implemented by calling dst.ReadFrom(src).

InnerReader is an io.Reader which attempts to decode an xml.StartElement from
the stream on the first call to Read (returning an error if an invalid start
token is found) and returns a new reader which only reads the inner XML
without parsing it or checking its validity.
After the inner XML is read, the end token is parsed and if it does not exist
or does not match the original start token an error is returned.

MultiReader returns an xml.TokenReader that's the logical concatenation of
the provided input readers.
They're read sequentially.
Once all inputs have returned io.EOF, Token will return io.EOF.
If any of the readers return a non-nil, non-EOF error, Token will return that
error.

Skip reads tokens until it has consumed the end element matching the most
recent start element already consumed.
It recurs if it encounters a start element, so it can be used to skip nested
structures.
It returns nil if it finds an end element at the same nesting level as the
start element; otherwise it returns an error describing the problem.
Skip does not verify that the start and end elements match.

TeeReader returns a Reader that writes to w what it reads from r.
All reads from r performed through it are matched with
corresponding writes to w. There is no internal buffering -
the write must complete before the read completes.
Any error encountered while writing is reported as a read error.

Unwrap reads the next token from the provided TokenReader and, if it is a
start element, returns a new TokenReader that skips the corresponding end
element. If the token is not a start element the original TokenReader is
returned.

Token implements the TokenReader interface.
It reads a token from the pipe, blocking until a writer arrives or the write
end is closed. If the write end is closed with an error, that error is
returned as err; otherwise err is io.EOF.

EncodeToken implements the TokenWriter interface.
It writes a token to the pipe, blocking until one or more readers have
consumed all the data or the read end is closed.
If the read end is closed with an error, that err is returned as err;
otherwise err is ErrClosedPipe.

MultiWriter creates a writer that duplicates its writes to all the
provided writers, similar to the Unix tee(1) command.
If any of the writers return an error, the MultiWriter immediately returns
the error and stops writing.

WriterTo writes tokens to w until there are no more tokens to write or when
an error occurs.
The return value n is the number of tokens written.
Any error encountered during the write is also returned.