clangsa: Track GC root slot contents
Separate root slot contents from value liveness in the GC checker so assignments through saved root-slot pointers, root-slot overwrites, root-array aliases, and multi-root values update rootedness consistently.
Track permanent roots and root-slot associations separately from ValueState. ValueState now records liveness and diagnostic metadata, while root lookup computes current rootedness from the root maps. Preserve existing roots when storing into rooted object fields so a shorter-lived container root does not replace a longer-lived root.
Keep subtype and type-equality calls modeled as safepoints, and root the runtime values exposed by the full analyzegc sweep instead of weakening those call models.
Represent root lifetimes explicitly instead of overloading an integer depth sentinel, and document the slot-content invariant between GCRootContentMap and GCValueRootMap.
Co-authored-by: OpenAI <support@openai.com>