Correct a few things in the ceiling/floor generator.

Use a different way for handling N+1-bit multipliers in the signed case.
Keep the correct multiplier when the dividend is known to be
positive or negative.
Make the floor transform give up during compilation.

Otherwise the compilation fails for some reason when this transform
is used in target-char.lisp.

TODO: Fix the issue causing this instead of using this workaround.