Caller gets to choose the result type of a BinaryOpArithmeticExpr.
Simplify how operators are implemented.

The behavior of the operators will be driven by the type of the left-hand
operand, and the code in the operator itself will be simple.