Big RGB Conversion Refactor

* Removed RGB planes from avifImage and associated avifPlanesFlags (breaking change)
* New struct avifRGBImage for storing RGB conversion settings and pixel buffer
* Added support for encoding and preserving limited alpha range (avifImage.alphaRange)
* Created avifyuv test for roundtrip testing of depth rescaling / range conversion / formats
* Removed memset(0) calls on YUVA plane allocation, they were unnecessary and slow
* Removed old AVIF_FIX_STUDIO_ALPHA block, now that limited alpha is allowed/supported
* Updated README with new RGB conversion examples
* Updated avif_example1 to use new conversion
diff --git a/include/avif/internal.h b/include/avif/internal.h
index d350bc4..2d46f63 100644
--- a/include/avif/internal.h
+++ b/include/avif/internal.h
@@ -60,8 +60,29 @@
 AVIF_ARRAY_DECLARE(avifRODataArray, avifROData, raw);
 AVIF_ARRAY_DECLARE(avifRWDataArray, avifRWData, raw);
 
-// Used internally by avifDecoderNextImage() when there is limited range alpha
-void avifImageCopyDecoderAlpha(avifImage * image);
+typedef struct avifAlphaParams
+{
+    uint32_t width;
+    uint32_t height;
+
+    uint32_t srcDepth;
+    avifRange srcRange;
+    uint8_t * srcPlane;
+    uint32_t srcRowBytes;
+    uint32_t srcOffsetBytes;
+    uint32_t srcPixelBytes;
+
+    uint32_t dstDepth;
+    avifRange dstRange;
+    uint8_t * dstPlane;
+    uint32_t dstRowBytes;
+    uint32_t dstOffsetBytes;
+    uint32_t dstPixelBytes;
+
+} avifAlphaParams;
+
+avifBool avifFillAlpha(avifAlphaParams * params);
+avifBool avifReformatAlpha(avifAlphaParams * params);
 
 // ---------------------------------------------------------------------------
 // avifCodecDecodeInput
@@ -121,8 +142,6 @@
 struct avifCodecInternal;
 
 typedef avifBool (*avifCodecOpenFunc)(struct avifCodec * codec, uint32_t firstSampleIndex);
-// avifCodecAlphaLimitedRangeFunc: returns AVIF_TRUE if an alpha plane exists and was encoded with limited range
-typedef avifBool (*avifCodecAlphaLimitedRangeFunc)(struct avifCodec * codec);
 typedef avifBool (*avifCodecGetNextImageFunc)(struct avifCodec * codec, avifImage * image);
 // avifCodecEncodeImageFunc: if either OBU* is null, skip its encode. alpha should always be lossless
 typedef avifBool (*avifCodecEncodeImageFunc)(struct avifCodec * codec, avifImage * image, avifEncoder * encoder, avifRWData * obu, avifBool alpha);
@@ -135,7 +154,6 @@
     struct avifCodecInternal * internal; // up to each codec to use how it wants
 
     avifCodecOpenFunc open;
-    avifCodecAlphaLimitedRangeFunc alphaLimitedRange;
     avifCodecGetNextImageFunc getNextImage;
     avifCodecEncodeImageFunc encodeImage;
     avifCodecDestroyInternalFunc destroyInternal;