Implement 2n-bit multiply-and-shift in the mul-by-frac generator.

Taken from one of Paul Khuong's writing on div-by-mul.
TODO: Add comments explaining some steps of the algorithm.
Add some comments to the mul-by-frac generator.

Also restructure the code a bit and change the worst-case
example to one that still needs generic multiplication and shift.
Simplify quotient calculation for large Y and shift values.

Use comparisons to determine the quotient in
GEN-(UN)SIGNED-DIV-BY-CONST-EXPR when the divisor is so
large that only a few quotients are possible. Do the same
in GEN-UNSIGNED-MUL-BY-FRAC-EXPR for large shift values.