This was quite a long one, since I decided to both implement support for constructing exponent ops, and also made sure that the expressions get reasonably optimized once they are constructed.