Get init-field working in most cases
Make init defaults work correctly as well
Fix optional argument check that was broken
Improve `super-new` handling.

Now `super-new` calls are type-checked with the right
context so that init arguments can be passed as arguments.

In addition, the `super-new` checking was factored out into
three functions.