Asserts InternPool keys have unique representations, resolving an inline TODO. I also added asserts that these types are extern compatible so as to guarantee stability across compilations.
While I was at it I also made a small improvement to hasUniqueRepresentation WRT unions. Not necessary for this PR could be separated.
SpirvType was failing both of these assertions. I resolved this by making it extern, and adding explicitly zeroed padding.
I didn't yet add test coverage that type equality works on reified SPIRV types, as zirReifySpirvType returns unique values for each type regardless of the hash. See #35915 for more info.