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, testing 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, primitive values etc.)
- HandleDefaultParameterValuesPass now converts C++'s implicit type constructor to explicit ones and emits "new" only when appropriate.

This pull requests fixes the problems referred in https://github.com/mono/CppSharp/issues/368
This should just call `WalkExpression(Cast)`. Then you can move the new expressions handling to the top-level switch.