refactor - reduce CTFE memory consumption pt 1

Currently, CTFE allocates memory for every step in its computation. This can result in an enormous amount allocated. This is the first step towards using stack memory instead.
> That's what UnionExp::exp() is for.

I hope you don't want to mix heap and stack allocated Expression pointers.
Conversion to `Expression*` should only be done when there is complete control over the lifetime, like in AddExp.