added test case for UnionType

The file test6.mw contains a very simple piece of code that has a variable which
is of UnionType. The constant 0 is assigned to the variable, causing the
frontend to insert a UnionMappedType that wraps the Int in a Int|Real. The
backend is required to accomodate all these features in C code.
added regression test to test6.mw

Line 5 of tests/test6.mw reveals an issue in IfCaseExpr where the individual
branch expressions would not be assigned the final requiredType. E.g. in an
IfCaseExpr that returns Int in one and Real in the other branch, the required
type of both branches remains "*", instead of being set to "Int|Real" as it
ought to be.
added codegen for UnionMappedType

Added infrastructure that allows type mappings to generate additional code for
an expression. At the moment only UnionMappedType is implemented, which wraps
the code of an expression inside an inline struct initializer. Other type
mappings that are likely to come up in the future include casts and interface
mappings.

There is an unrelated issue in IfCaseExpr though, as detailed in the previous
commit.