The problem from the beginning has been that some parts of the code expected to
receive interleaved buffers from Dither and some expected non-interleaved buffers.
I was trying to keep the changes to a minimum, but it just wasn't possible.
The result is that Dither can now accept any combination of non-interleaved and
interleaved source and destination buffers.
I still want to review every single usage of Dither (and all of the intermediaries)
because I've seen allowances here and there for the lack of Dither returning
interleaved buffers. Since it can now return interleaved buffers, some of that
extra processing can be removed.