Create Instr<T> and Eval<T> classes

These new classes significantly simplify the macros to overload
operators. In addition, the interfaces for these classes avoid
the coupling on the Var<T> API thereby creating a more cohesive
expression simplification algorithm.