Fix bogus and inconsistent translations of max and min
There were several related bugs in the translations of max and min:
1) In the case of mixed float and rational arguments (any case where
a rational argument was present and float contagion should be applied),
the translation was completely broken because the translated (Maxima)
rational arguments were not actually being converted to floats before
being passed to MAX or MIN.
2) In various cases with mixed argument modes, the return value was
not consistent with the interpreted case (example: an integer was
returned when interpreted but a float was returned when translated).
3) The mode used for the return value was not always correct with
mixed fixnum and float argument modes. It was possible for the
translator to use a mode of float when the return value would
actually be a fixnum.
Bug cases 1 and 2 above were present in Macsyma. Bug case 3 above
was not a bug under Maclisp because there MAX and MIN always return
a float when any argument is a float.
In Common Lisp, implementations have multiple choices they can make
about what MAX and MIN return under different circumstances. The type
of the return value is not guaranteed when the arguments are a mix of
float and rational types.
To avoid implementation-dependent behavior of MAX and MIN, and to
have behavior consistent with the interpreted case, we are now more
conservative when translating max and min to MAX and MIN. We now only
translate into MAX and MIN calls when every argument has the same mode
(either all fixnum or all float).
tests/rtest_translator.mac runs as expected, with new tests.