An error type for reporting incompatible types in operators.
Establish an interface for getting the result type of an expression.

So far it's only implemented for the two leaf nodes of the codegen tree,
but ultimately it ought to be implemented for all of the others, many of
them doing it in terms of these two leaf nodes.
Start to implement evaluate() for binary operators.

Create a common base class for the arithmetic-oriented binary operators
since they will all share the same type coersion behavior.

This is still a work-in-progress and does not yet work, nor is it tested.