added UnionType codegen

First steps towards issue #12. The code for union types is now generated, but
cannot be used by anything. The AssignmentExpr needs to be extended to select
the appropriate active union member when assigning to a variable of union type.
Or rather have a cast that casts e.g. `Int` to `Int|Real` by appropriately
selecting the active union member.
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.
Merge branch 'master' into iss12-merge
Merge branch 'master' into iss12
Merge branch 'master' into iss12
fixed IfCaseExpr mapped type issue

IfCaseExpr now properly imposes its actualType as the requiredType of its
conditions and otherwise branch. In order to do this, it uses a new function
in the algorithm::type namespace called ignoreMapped. This function strips away
all mapped types (only UnionMappedType at the moment) wrapped around another
type. It should be used whenever an actualType, which might be subject to mapped
types, is used in another part of the code.

This brings us a step closer to finalizing issue #12, although the code
generation for UnionType does not yet generate a proper index for each of the
possible types.
Merge remote-tracking branch 'origin/iss12' into iss12
whitespace fix