"Clarity" does not come from putting comments and blank lines in the code. Properly naming your variables and functions will clear things up. For example fnv32a is a pretty poor name for a function, as it is not even pronouncable.
A good rule of thumb is to move the explanations in the comments to become the names of your functions.
For example "fnv32a" could be named "compression_quality_hash" I doubt that this is really the perfect name, but at least it is what the comment says; you get the idea.
Even if the authors of an original paper used names like this in their definition of an algorithm (so an argument for the poor names would be to stick to the reference impl), your code and your contribution could be to make things clearer, rather than sticking to their poor, mathematical naming schemas.
However I really like the interface of the algorithm. While your code looks quite complicated on the inside, it is nicely usable from the outside; much like a wristwatch.
Random Examples of variables that I would rename:
https://bitbucket.org/tkatchev/yalz77/src/a9a8fab4ba706b5633...
https://bitbucket.org/tkatchev/yalz77/src/a9a8fab4ba706b5633...