v0.8.3 — pyproject.toml is the single version source

Fix the version-reporting drift v0.8.2 and every prior release shipped
with. aicodebox.__version__ reported "0.1.0" regardless of the actual
release tag (8 releases of lying), and the docker image only ever
tagged :latest.

Single canonical source now:

  - pyproject.toml [project] version — THE one place a release bump
    happens.
  - aicodebox/__init__.py reads it via importlib.metadata.version();
    falls back to "0.0.0+source" sentinel (NOT a hardcoded number)
    if dist-info isn't installed.
  - Makefile derives the docker tag from pyproject via awk; every
    `make build` tags BOTH :vX.Y.Z AND :latest. New `make version`
    prints the derived tag.
  - uv.lock refreshed.

Verified end-to-end: `docker run psyb0t/aicodebox:v0.8.3 python3 -c
'import aicodebox; print(aicodebox.__version__)'` → "0.8.3".

151 existing tests pass. No behavior change — version derivation is
infrastructure.

Migration: none. Anyone scripting against __version__ was already
getting "0.1.0" regardless of pull; they'll now get the real number
from v0.8.3 onward.