vibe-qc 0.4.6 — Schrödinger's Llama (runtime banner codename fix)

The v0.4.5 hotfix landed the docs-CI banner-loader fix (01967df)
but missed cherry-picking the upstream commit (28a019b) that
actually adds the codename catalogue to vibeqc.banner and threads
it into the runtime banner string. Result: import vibeqc;
print_banner() on v0.4.5 read 'Release v0.4.5' without the quoted
codename suffix the policy promises.

Cherry-picks 28a019b: adds vibeqc.banner.RELEASE_CODENAMES (public
catalogue keyed by X.Y.0 minors), vibeqc.banner.codename_for_version
(three-step lookup with PEP-440 dev-suffix stripping + patch-to-
minor fallback), and the codename suffix in _version_descriptor.

After this release, the banner reads
  Release v0.4.6 "Schrödinger's Llama"
on a tagged clean tree.

9 new tests in tests/test_banner_codename.py pin the catalogue
contract.

No library code changes.