Tagged-PDF: Implement parsing of StructTreeRoot

Implement parsing of the StructTreeRoot entry of the Catalog. Also, the
Catalog::getStructTreeRoot() and PDFDoc::getStructTreeRoot() methods are
modified to return an instance of StructTreeRoot instead of an Object.

All elements from the StructTreeRoot are parsed except for:

- IDTree: it is a lookup tree to locate items by their ID, which would
  be barely useful because the whole structure tree is to be kept in
  memory, which should be fast enough to traverse.
- ParentTreeNextKey: This is needed only when the ParentTree object is
  to be modified. For the moment the implementation deals only with
  reading, so this has been deliberately left out.

Also, pdfinfo is used to print tagging info from Catalog::getMarkInfo()
instead opf assuming that the presence of the StrucTreeRoot implies that
the file is tagged.
Tagged-PDF: Implement parsing of StructElem objects

Implement parsing of StructElem tree nodes from the document structure tree,
each object is parsed as a StructElement instance. Attributes and extraction
of content out from elements are not yet handled.
Tagged-PDF: Implement parsing of StructElem attributes

Parse attributes of StructElem nodes of the document structure tree.
Both standard attributes and user properties are mapped to instances
of the Attribute class. Attributes are parsed both via ClassMap
references and directly referenced from the StructElem objects.
Tagged-PDF: Text content extraction from structure elements

Implement StructElement::getText(), by using MCOutputDev. This output device
captures the a sequence MCOp structures representing the text drawing
operations for a particular marked content text object from the page stream.
Those are then used to convert the individual Unicode characters to the
returned string.
Tagged-PDF: Modify pdfinfo to show the document structure
Tagged-PDF: Implement the utils/pdfstructtohtml tool

This adds a new tool "utils/pdfstructtohtml" that uses the document
structure from tagged PDFs to generate an HTML document from it, trying
to preserve as much of the structure and some of the styling in the
output. This serves also as a demonstration of how to use the Attribute
and StructElement classes.
Tagged-PDF: Expose the structure tree in poppler-glib

Implements two new GObject classes, which build upon StructTreeRoot
and StructElement to expose the document structure of tagged PDFs
in the GLib binding:

- PopplerStructure wraps StrucTreeRoot, and contains additional utility
  methods to search for elements in the structure tree.
- PopplerStructureElement wraps StructElement, and does the heavy lifting
	of exposing data in GLib-friendly data types.

For standard attributes, to avoid cluttering the class with fmethods, a
single poppler_structure_element_get_attribute() method is implemented,
which returns either NULL (for undefined attributes) or a GVariant
containing a sensible representation of the value.
Tagged-PDF: Pane in poppler-glib demo showing the structure

Adds a new pane in poppler-glib-demo showing the structure for Tagged-PDF
documents. It also serves as an example on how to to use the API for
PopplerStructure and PopplerStructureElement.
Tagged-PDF: Heuristics in poppler-glib for data/layout table identification

Add functions in poppler-glib which, used on a PopplerStructureElement of
type POPPLER_STRUCTURE_TABLE, determine whether a table is used for layout
or contains actual data. The heuristic is quite simple so far:

- poppler_structure_element_is_data_table(): checks for table headings
  and that THead/TBody elements are present.
- poppler_structure_element_is_layout_table(): negates the result of
  the previous function.

The idea is that in the later case a different heuristic could be
implemented later on, and at some point tables could be "data tables",
"layout tables", or the heuristics can not tell for sure.