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
Please only use "as" casts when you check for null. Otherwise just use direct casts.