Range (limited/full) cleanup and refactor

* Having two enums that meant the same thing but had slightly different values was awful
* No need to lose type safety in avifNclxColorProfile for read convenience
* This is a breaking change, but hopefully easy for maintainers to adjust to
diff --git a/src/codec_aom.c b/src/codec_aom.c
index 1f131cd..640f56a 100644
--- a/src/codec_aom.c
+++ b/src/codec_aom.c
@@ -142,7 +142,7 @@
             nclx.colourPrimaries = (uint16_t)codec->internal->image->cp;
             nclx.transferCharacteristics = (uint16_t)codec->internal->image->tc;
             nclx.matrixCoefficients = (uint16_t)codec->internal->image->mc;
-            nclx.fullRangeFlag = (image->yuvRange == AVIF_RANGE_LIMITED) ? AVIF_NCLX_LIMITED_RANGE : AVIF_NCLX_FULL_RANGE;
+            nclx.range = image->yuvRange;
             avifImageSetProfileNCLX(image, &nclx);
         }
 
diff --git a/src/codec_dav1d.c b/src/codec_dav1d.c
index d3c45bf..fef0642 100644
--- a/src/codec_dav1d.c
+++ b/src/codec_dav1d.c
@@ -150,7 +150,7 @@
             nclx.colourPrimaries = (uint16_t)dav1dImage->seq_hdr->pri;
             nclx.transferCharacteristics = (uint16_t)dav1dImage->seq_hdr->trc;
             nclx.matrixCoefficients = (uint16_t)dav1dImage->seq_hdr->mtrx;
-            nclx.fullRangeFlag = (image->yuvRange == AVIF_RANGE_LIMITED) ? AVIF_NCLX_LIMITED_RANGE : AVIF_NCLX_FULL_RANGE;
+            nclx.range = image->yuvRange;
             avifImageSetProfileNCLX(image, &nclx);
         }
 
diff --git a/src/codec_libgav1.c b/src/codec_libgav1.c
index eb61c97..547138e 100644
--- a/src/codec_libgav1.c
+++ b/src/codec_libgav1.c
@@ -112,7 +112,7 @@
             nclx.colourPrimaries = (uint16_t)gav1Image->color_primary;
             nclx.transferCharacteristics = (uint16_t)gav1Image->transfer_characteristics;
             nclx.matrixCoefficients = (uint16_t)gav1Image->matrix_coefficients;
-            nclx.fullRangeFlag = (image->yuvRange == AVIF_RANGE_LIMITED) ? AVIF_NCLX_LIMITED_RANGE : AVIF_NCLX_FULL_RANGE;
+            nclx.range = image->yuvRange;
             avifImageSetProfileNCLX(image, &nclx);
         }
 
diff --git a/src/read.c b/src/read.c
index 882a689..bae84cd 100644
--- a/src/read.c
+++ b/src/read.c
@@ -576,8 +576,7 @@
             ((tileProfile == AVIF_PROFILE_FORMAT_NCLX) &&
              ((tile->image->profileFormat != tileProfile) || (tile->image->nclx.colourPrimaries != tileNCLX->colourPrimaries) ||
               (tile->image->nclx.transferCharacteristics != tileNCLX->transferCharacteristics) ||
-              (tile->image->nclx.matrixCoefficients != tileNCLX->matrixCoefficients) ||
-              (tile->image->nclx.fullRangeFlag != tileNCLX->fullRangeFlag)))) {
+              (tile->image->nclx.matrixCoefficients != tileNCLX->matrixCoefficients) || (tile->image->nclx.range != tileNCLX->range)))) {
             return AVIF_FALSE;
         }
     }
@@ -848,16 +847,21 @@
         data->properties.prop[propertyIndex].colr.icc = avifROStreamCurrent(&s);
         data->properties.prop[propertyIndex].colr.iccSize = avifROStreamRemainingBytes(&s);
     } else if (!memcmp(colourType, "nclx", 4)) {
+        uint16_t tmp16;
         // unsigned int(16) colour_primaries;
-        CHECK(avifROStreamReadU16(&s, &data->properties.prop[propertyIndex].colr.nclx.colourPrimaries));
+        CHECK(avifROStreamReadU16(&s, &tmp16));
+        data->properties.prop[propertyIndex].colr.nclx.colourPrimaries = (avifNclxColourPrimaries)tmp16;
         // unsigned int(16) transfer_characteristics;
-        CHECK(avifROStreamReadU16(&s, &data->properties.prop[propertyIndex].colr.nclx.transferCharacteristics));
+        CHECK(avifROStreamReadU16(&s, &tmp16));
+        data->properties.prop[propertyIndex].colr.nclx.transferCharacteristics = (avifNclxTransferCharacteristics)tmp16;
         // unsigned int(16) matrix_coefficients;
-        CHECK(avifROStreamReadU16(&s, &data->properties.prop[propertyIndex].colr.nclx.matrixCoefficients));
+        CHECK(avifROStreamReadU16(&s, &tmp16));
+        data->properties.prop[propertyIndex].colr.nclx.matrixCoefficients = (avifNclxMatrixCoefficients)tmp16;
         // unsigned int(1) full_range_flag;
         // unsigned int(7) reserved = 0;
-        CHECK(avifROStreamRead(&s, &data->properties.prop[propertyIndex].colr.nclx.fullRangeFlag, 1));
-        data->properties.prop[propertyIndex].colr.nclx.fullRangeFlag |= 0x80;
+        uint8_t tmp8;
+        CHECK(avifROStreamRead(&s, &tmp8, 1));
+        data->properties.prop[propertyIndex].colr.nclx.range = (avifRange)(tmp8 | 0x80);
         data->properties.prop[propertyIndex].colr.format = AVIF_PROFILE_FORMAT_NCLX;
     }
     return AVIF_TRUE;
diff --git a/src/write.c b/src/write.c
index d50436d..41b3865 100644
--- a/src/write.c
+++ b/src/write.c
@@ -401,7 +401,7 @@
                 avifRWStreamWriteU16(&s, item->image->nclx.colourPrimaries);         // unsigned int(16) colour_primaries;
                 avifRWStreamWriteU16(&s, item->image->nclx.transferCharacteristics); // unsigned int(16) transfer_characteristics;
                 avifRWStreamWriteU16(&s, item->image->nclx.matrixCoefficients);      // unsigned int(16) matrix_coefficients;
-                avifRWStreamWriteU8(&s, item->image->nclx.fullRangeFlag & 0x80);     // unsigned int(1) full_range_flag;
+                avifRWStreamWriteU8(&s, item->image->nclx.range & 0x80);             // unsigned int(1) full_range_flag;
                                                                                      // unsigned int(7) reserved = 0;
                 avifRWStreamFinishBox(&s, colr);
                 ipmaPush(&item->ipma, ++itemPropertyIndex);