ocaml-yaml: redesign Value.t as proper YAML 1.2 superset of JSON
YAML 1.2.2 is a strict superset of JSON at the language level, and the AST now reflects that. Every constructor carries a Meta.t for source location preservation, Mapping keys are general Value.t (not just strings) per the spec's complex-key support, and two YAML-specific variants land:
- Alias of string node — anchor reference left unresolved so consumers can see the intent (the parser still resolves at parse time by default; the constructor is available for applications that want to preserve the anchor graph).
- Tagged of { tag : string node; value : t } — explicit type tags (!!int, !!bool, or custom !foo) preserved for schema-aware consumers.
Value.sort_of is the Sort classifier previously hidden in Codec. Value.equal ignores Meta.t (structural semantics only) so tests compare cleanly. Value.pp formats the YAML-ish shape.
Codec pattern matches updated to destructure nodes, Mapping iteration filters non-string keys for string-keyed combinators (key, obj/mem, keep_unknown). string_keyed_entries helper is a single point for that convention.
yaml.json and yaml.jsont bridges translate Yaml.Value.t <-> Json.t / Jsont.json, skipping non-string mapping keys in the JSON direction (since JSON doesn't support them). Alias projects to a *name string; Tagged projects to its wrapped value.
irmin/lib/yaml migrated: Yaml.Mapping _ now uses string_keyed_entries to filter, constructors wrap strings in Value.string.
All 37 existing tests still pass unchanged (they use Value.equal which ignores Meta).