Apply a binary arithmetic operator to two amounts - converting to the
second one's commodity, adopting the lowest precision, and discarding
any price information. (Using the second commodity is best since sum
and other folds start with a no-commodity amount.)

MixedAmount derives Eq in Types.hs, but that doesn't know that we
want $0 = EUR0 = 0. Yet we don't want to drag all this code in there.
When zero equality is important, use this, for now; should be used
everywhere.

Simplify a mixed amount by combining any component amounts which have
the same commodity and the same price. Also removes redundant zero amounts
and adds a single zero amount if there are no amounts at all.