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.