[refactor] Using UnionExp in constfold.c

This is changing constfold.c functions from returning Expression* to UnionExp, part of the ongoing effort to improve CTFE.

It doesn't go as far as it should in order to keep the diffs as easy to review as practical. More refactoring will come later.
I know, and plan to do it, but I wanted this PR to be a bite-sized review chunk, and so concentrated on just making the interface work. Optimizing within the functions to reduce allocations comes later.