C++: TIFF pixel data read/write interfaces and skeleton implementation

- Minor interface cleanups for IFD Field methods
- Minor Sentry exception message improvement
- IFD PixelType accessors
- Basic interfaces for strip/tile read/write

--no-rebase

--------

Testing: Most of the additions are interfaces only; everything else is covered by unit tests.  The skeleton implementation visitors are tested passing compilation.
This has been slightly adjusted now.  Since the VariantPixelBuffer can represent all pixel types, we just reset the buffer to the correct type/size/order if it doesn't match the image.  This simplifies things for the caller--they don't need to reimplement the logic here every time they want to create and fill a pixel buffer, and can simply default construct and use it straight away.