GMarkupReader: new GIO stream-based markup parser

Add GMarkupReader which is a new GMarkup-style parser that reads from a
GInputStream and operates as a sort of iterator that gets advanced to
each token in sequence and then inspected.

The API makes it quite nice to write parsers where the function nesting
(in C) follows the nesting of the elements in the file being parsed.

It's also possible to use this new class to write async or
partially-async parsers in which the stream is advanced until reading
would block (via GPollableInputStream) and only then is an async call
made.
4 files changed