C++: Add FormatReader interface and associated classes

This PR primarily adds the FormatReader interface and helper classes needed by the interface.  Testing should be taken care of by the testsuite for some of the classes.  FormatReader does not yet have a concrete implementation, so is not directly testable in its own right.  The code itself could use some review to make sure that the interfaces are sane and complete.

The git version changes are to switch to using "git log" rather than "git show", which allows us to request the data we want directly without the need for complex+fragile parsing of the output.