Compress Primitive texture coordinates

Reduces Primitive texture coordinates to 12 bits of precision which may cause artifacts for very large textures, though I haven't seen any, so we may want to add an option to disable this in the future.

Also, the code that compresses the texture coordinates is in GeometryPipeline and the code that decompresses them are in Primitive when the shader is modified. We may want to pull those out if we want to use this elsewhere. I wasn't sure where to put it.
If you feel like pulling this out now (not pressing, up to you), perhaps we could rename `Oct` to `AttributeCompression` (or something similar) and put it there and rename the existing functions accordingly.