Improves codegen of multiple return values from fat if-blocks.

This pull request changes the code generation for if statements with multiple return values. Previously, the results where returned in a tuple, which was then immediately deconstructed. The new implementation forward-declares a set of (mutable) variables that are updated at the end of the branch blocks. The pull request also adds a ZeroVal factory object to generate "zero" values for arbitrary types, which can then be used to initialize variables (e.g. in forward declarations) with minimal overhead in the generated code.

Needs to be reviewed as it probably affects a lot of existing code.