- New module cddb.py: direct GnuDB/FreeDB HTTP lookup using CDDB protocol,
with same retry+random-delay logic as MusicBrainz barcode lookup
- get_discid() reads disc fingerprint via cd-discid before ripping
- If abcde returns no CDDB track data, lookup_by_discid() queries GnuDB
directly (up to 3 retries, 2-6 s random pause between attempts)
- TrackInfo moved from ripper.py to models.py to break circular import
(cddb.py and ripper.py both use TrackInfo)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>