Make GEN-MULTIPLY-SHIFT-EXPR more efficient.

Scale up the multiplier whenever possible so that the 2N-bit and
N+1-bit multiplications are used more often.
Also check if the multipliers have the correct type before using
them for 2N-bit multiplication (the signed version's multipliers
can overflow sometimes).
Fix ceilinged/floored division by rationals.

Fix some corner cases in the floor/ceiling code generators that
cause errors or incorrect results.
Add a test case that would have detected the incorrect comparison
code.
Remove unecessary IF's from generated floor/ceiling division code.

Instead of using (if t ...) or (if nil ...) when only one branch
is possible, remove the condition checking altogether.
This doesn't cause any performance changes, since the comparison
would have been removed during compilation anyway, but it shortens
the code a little and makes the examples more human-readable.