Fix default params

Here's some work to get the additional cases of default parameter values working.

Here's what's changed:

- More tests implemented that test cases not covered before.
- Modifications to the AST: additional ImplicitCast and Explicit cast Statement Classes to accommodate the implicit type casting in default values.
- Some Expressions can now have subexpressions to allow nesting different expressions, (casts, constructors, plain values etc.)
- HandleDefaultParameterValuesPass now converts C++'s implicit type constructor to explicit ones and "new" only when appropriate.