Add new function: %LOSE-WORD-DERIVED-TYPE.

This returns its argument, but sets the derived type back to WORD. This
is needed for the fixnum optimization in GEN-UNSIGNED-DIV-BY-CONSTANT-EXPR
to remove unnecessary shifting.
Previously, before the mask was applied, the compiler converted the number
into a fixnum when its derived type allowed it, and then
%TAGGED-WORD-TO-FIXNUM converted it back, leading to two unnecessary shifts.

TODO: Find a better/cleaner way of doing this, if possible.
Restrict the use of the fixnum optimization.

If the optimization would result in an N+1-bit multiplier (because of
the wider range of X), don't use it. Also omit it if we can perform
direct multiplication without it.
Omit the signed truncate transform if the unsigned one can be used.

This way, positive fixnums will go to the unsigned truncate transform.