Add basic node & transform classes

A simple custom node and transform inherited from the relevant classes
in docutils and registered via the sphinx interface.

This is kind of half a commit but I am happy to keep it separate. The
Transform implementation suggests that the node should have a handler
object on it which will ultimately do all the work.
Switch doxygenindex directive to be handle be transform

Instead of processing everything in place in the directive code, we
output a single DoxygenNode with the appropriate data to be able to
process the doxygen xml at the "transform" stage of the document
preparation.

We output the node with its own IndexHandler which is then used by the
DoxygenTransform to replace the node with its expanded doxygen content.
Add source path concept to ProjectInfo

To reflect the root directory from which to specify relative paths to
source files that we want to handle as part of a project.

This is paving the way for behaviour to automatically handle the
generation of the doxygen xml files.
Add basic implementation of autodoxygen directive

We add a AutoDoxygenIndexDirective which takes the arguments and puts
out a DoxygenAutoNode into the document.

We give it a project_info object which is specially prepared by the
create_auto_project_info method and is set up to have a source path but
no project path. ie. it knows where the root of the source code to be
processed is but not the root of the resulting xml yet.

We then add a DoxygenAutoTranform which looks at all the
DoxygenAutoNodes in the document, figures out the common projects and
source directories, doxygen generates all the files together, updates
the project_info instances to point at the new xml directory for the
doxygen output and then creates DoxygenNodes which replace the
DoxygenAutoNodes in the document and are picked up by our other
Transform and processed as normal.

The code is pretty hacky at the moment and should have more parts
dependency injected to keep it cleaner.
Commenting and passing name to the error message

So that we properly identify the usage of doxygenindex and
autodoxygenindex in the errors.
Introduce DoxygenProcessHandler and AutoProjectInfo

We want to separate out all the ugly subprocess call and stuff into a
separate helper class to keep it as clean as possible. We inject it with
the various bits it needs to get the job done.

We create a AutoProjectInfo concept which handled separately and stored
separately from the standard ProjectInfo. This acts as a temporary for
the parts of the code which need to think in terms of source code and
generating the doxygen output and then we use it to create a standard
ProjectInfo instance and pass that on to the rest of the code. It
separates out the concepts and allows us to keep the ProjectInfo class
immutable.

We also introduce the TransformWrapper class to get around the fact that
the Sphinx and Docutils APIs expect you to pass a class object directly
to them so they can take care of instantiation. This prevents easy
dependency injection which is annoying so we create a wrapper with a
__call__ method which is going to pretend to be the class object but
allows us to inject the helper classes we need.
Switch to using "source" instead of "project" for auto directive

Otherwise we're overloading the word and it is a bit confusing. We
should probably do the same for "path" as well.
Switch path to source-path for auto directive

To avoid confusion with the behaviour of path in the other directives.
Add documentation for autodoxygenindex directive

Covering the basics, though without a failing case as we need to chase
that up a bit.
Credit Scopatz for autodoxygenindex concept
Support custom xml output directory with reasonable default

We add a config value to determine the directory that the doxygen xml is
generated to for the autodoxygenindex directive. We attempt to default
to a reasonable value by getting the doctrees output directory and
stripping the last component off the end.
Add documentation for the config values
Merge branch 'autodoxygen'