idc: reject stream dimensions that disagree with the caller's
[decompress] ignored its [~width]/[~height] arguments and trusted
whatever the bitstream header declared. A fuzz input of 5 bytes
decoded into a 5757x51873 stream, which drove [array_2d] to
allocate ~300M entries and parked [inverse_dwt_2d] in a multi-minute
loop.
Thread the expected dimensions through [decode_coefficients] and
fail with [invalid_arg] before allocating when they don't match the
header. The mli documents [~width]/[~height] as the expected output
size, so this only rejects malformed streams.
Fixes the fuzz-test failure surfaced by
[test_decompress_crash_safety] on input "\022}\202\161_".