[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.
OT: goto skips intialization analysis should be smarter than that, the block you're jumping to can't use those variables.