ci(cache): replace Swatinem/rust-cache with a DIY R2 Rust cache
Swap the Swatinem/rust-cache step in the setup composite action for an rclone-backed R2 restore, and add per-saver-job save steps. The cache is a pair of gzip tarballs (cargo registry+git, and target/) keyed on os + rustc + Cargo.lock under a shared-key namespace, with an (os, rustc) prefix fallback for partial reuse when the lockfile churns. Because R2 is not ref-scoped, main / *-dev / tags may all write keys while PR and fork branches stay restore-only, so caches now restore across refs including tags — the core GHA-cache limitation this replaces. The release package jobs become savers under their own v0-pkg namespace so a warm package build no longer starts cold and never clobbers build.yml's cache. generate-icons opts out of the Rust cache since it does not compile.