Add safe-coloured-text-parsing for ANSI escape code parsing
## Summary
- New package `safe-coloured-text-parsing`: parses ANSI SGR escape codes from `Text` into styled `Chunk`s — the inverse of `renderChunkText`
- New package `safe-coloured-text-parsing-gen`: `GenValid` instances and 28 tests
- Two-layer attoparsec architecture: tokenizer (`Text -> [AnsiToken]`) + interpreter (`[AnsiToken] -> [Chunk]`)
- Both layers support lazy `Text` for streaming via `Data.Attoparsec.Text.Lazy`
## Test plan
- [x] 28 tests: unit, property, roundtrip (render then parse recovers style), lazy/strict equivalence
- [x] `stack build --pedantic`
- [x] `stack test`
- [x] `pre-commit run -a`
- [x] `nix flake check` (all backward/forward compat checks)