C++: Incremental metadata processing work

An assorted collection of current work for fixing metadata and getting OME-XML handling to a state where OME-TIFF can be read and written.  Note: this is not complete, it will be completed with a few followup PRs.

- showinf output is improved and includes Modulo support, matching the Java implementation
- MetadataTools has a number of helper functions added
- Initial support for local entity resolving for validation
- Miscellaneous other fixes

One design note to be aware of.  In the Java implementation there is a split between MetadataTools and OMEXMLServiceImpl due to the use of OMEXMLService.  The C++ implementation does not have OMEXMLService and uses OMEXMLMetadata directly, avoiding the need for such a split.  All OMEXMLServiceImpl metadata helpers are/will be in MetadataTools directly.  The function names are different in some cases since while similar to the Java MetadataTools, they are not exactly the same.  Since C++ also allows default function arguments, we also avoid having lots of forwarding methods to append default arguments.  Note that a few of the MetadataTools methods are stubbed out or return a default value.  These will be replaced with full implementations in future PRs.
I assume this is okay to ignore and doesn't also need a `@todo`.