cpp: compat: Add boolean type

This replaces the use of `bool` with a `boolean` POD type as the BIT PixelType to make the size, alignment and stored values in memory the same across all platforms and architectures.  This makes it possible to make certain assumptions and optimisations regarding the memory layout and to pass raw buffers between different libraries safely.  And also allows reinterpret_cast of a raw buffer to a boolean pointer/array, for example.  To all intents and purposes, this is a drop-in replacement for the native `bool` type, and should behave in exactly the same manner, other than for its storage size and in-memory representation.

--------

Testing: All aspects of initialisation, assignment, equality, size, alignment, packing and storage are tested by the unit tests.  If it's green, it's passed all the BIT PixelData and TIFF tests.
interoperability