cmake: Enable clang++ docstring checking
cmake: Enable -Wextra warnings

This requires fixing of all the warnings in static and generated code.
cmake: Enable -Wconversion warnings

Fix all type conversion warnings.  This also required changing
the size of some of the base types used e.g. pixel_size_type.
cmake: Enable -Wfloat-equal warnings

Floating point comparisons, primarily in test cases, updated to either
use integer comparisons or range comparisons (i.e. not equality).
cmake: Enable -Wformat=2 warnings
cmake: Enable -Wimplicit-atomic-properties warnings
cmake: Enable -Wmissing-delarations -Wmissing-prototypes warnings
cmake: Enable -Woverlength-strings warning
cmake: Enable -Wstrict-selector-match warning
cmake: Enable -Wundeclared-selector warning
cmake: Enable -Wunreachable-code warning
cpp: test: Disable warnings for intentional errors being tested
cpp: Explicitly initialise virtual bases in most-derived classes
cpp: bioformats: Disable switch default warning in PixelProperties
cpp: xerces: Clean up construction, assignment and implicit conversions

The only implicit conversion is now to bool, with explicit get()
methods providing access to the wrapped xerces-c node pointers.
This removes abiguity when used in if statements, where it will
now properly evaluate as bool.  It was previously evaluating as
the wrapped pointer and comparing to null (which was effectively
the same).

Also fix construction and assignment so that Element will
correctly assign the correct parent Node pointers as well.
xsd-fu: Restore commented-out setRoot argument in AggregateMetadata
cpp: bioformats: Move pragmas in PixelProperties outside function definitions

Older GCC versions don't like pragmas inside functions.  Newer versions of
GCC, and clang, are fine with this.
cpp: test: Remove typename to make older GCC versions work
Merge pull request #992 from rleigh-dundee/cpp-clang-flags

C++: Enable stricter warnings