Fix encoder edge cases: lit_length encoding and ll=0 repeat offsets
Two bugs fixed:
1. Literal length encoding: The formula for codes >= 16 was incorrect.
Used `16 + (lit_len - 16) / 4` which assumed all codes have same
extra bit count, but LL codes 16-19 have 1 bit, 20-21 have 2 bits,
etc. Fixed by using proper baseline table lookup for all codes >= 16.
2. Offset encoding with literal_length=0: When ll=0, the repeat offset
semantics shift per RFC 8878 section 3.1.1.5:
- offBase=1 means rep[1] (not rep[0]!)
- offBase=2 means rep[2]
- offBase=3 means rep[0]-1
The encoder was using offBase=1 for rep[0] regardless of ll, causing
corrupted output when ll=0 (decoder would use wrong repeat offset).
Fixed by encoding full offset when ll=0 and rep[0] is needed.
Also fixed match_length encoding to use proper baseline lookup.
All 19 tests pass. Verified with both OCaml and C zstd decompressors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>