Commutative versions of add and mul

Same implementations as in my thesis.

GHC complains that it doesn't "support associated types in instances
yet", but all the tests pass, so whatever.