v0.10.1 — schedule cold-cache grace

A GoAlertSchedule whose target-ref cache has never been warmed no longer
deletes live targets that are still declared in spec. This is the case an
operator restart reaches when it reconciles a schedule ahead of the
GoAlertUser CRs it references: attribution falls back to the
resolvedTargetRefs cache, and on a cold cache an unresolvable ref matches
neither a fresh resolution nor a cache entry, so convergence removed it.

Rotations received this grace in v0.9.0; schedules had the cache field but
no warmth marker, and that asymmetry was the bug.

The exposure was wider than first described. The AllUnresolved
short-circuit did not protect the all-unresolvable case, because
resolveTargets folds raw external targets into the same slice
unconditionally — so a single Slack-channel target in spec left it
non-empty, the guard never fired, and reconcile fell through to
convergence with an empty cache.

A cache-cold reconcile with any unresolved userRef now applies additions
and rule updates, withholds every removal, names the withheld targets and
the unresolved refs in a Warning ColdCacheGrace event, and marks the cache
warmed so the grace is consumed exactly once. The guard keys off
status.refTargetCacheWarmed directly, never off cache length: a
never-warmed cache and a warmed-but-empty one are otherwise
indistinguishable. Raw external targets were never at risk.

New field: GoAlertSchedule.status.refTargetCacheWarmed.

Every schedule predating this release has an unwarmed cache, so the first
reconcile after upgrading is when the grace is most likely to fire.

Epic goalert-provisioning-b6s.11.