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.
Yes, we can only call addMetadataOnly for OMEXMLMetadata (see the signature on addMetadataOnly), so ignoring other cases is correct here.