Local docker repos previously had no write path — the /v2 Docker Registry
API only proxied to upstreams. This makes a local docker repo a genuine
registry so `docker push`/`docker pull` (and podman/skopeo/buildah) work
against it directly, matching the project principle that a local repo is the
real thing rather than a mirror.
- Implement the Docker Registry HTTP API V2 write/read half for local docker
repos: blob uploads (monolithic and chunked POST/PATCH/PUT), manifest push,
tags list, and blob/manifest GET/HEAD.
- Store blobs and manifests through the existing content-addressable store;
keep a local_files reference per (repo, image) so the GC does not reap them.
Tags are mutable (UpsertLocalFile); digests and blobs are immutable.
- Dispatch /v2 reads to the local handler for local docker repos and fall
through to the upstream proxy otherwise; writes are local-docker only.
- Add UpsertLocalFile for mutable tag references.
- Cover the push/pull round-trip with a dockerised e2e test and unit-test the
registry path parser. Document the registry in the README.