Orthogonal to IfdIndex: the index identifies a position in the IFD
chain (IFD0, IFD1, …), while the kind identifies the tag namespace. A GPS
sub-IFD hanging off IFD0 is IfdIndex::MAIN + IfdKind::Gps.
This distinction matters because each namespace assigns its own meaning to
the same 16-bit code — 0x000b is ProcessingSoftware in Self::Tiff
but GPSDOP in Self::Gps. Use crate::TagOrCode::from_code_in to
resolve a code within a known namespace.
Marked #[non_exhaustive]: more namespaces (MakerNote, SubIFD, …) may be
added, so match must carry a _ => arm.
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.