[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.
It would be fairly easy to use UnionExp for `r` and `v` too.