Fix void type handling in override checks.
Fix constructors for inheriting user-defined types.
Use callvirt when calling user defined methods

and disallow return type covariance because it is not supported by
the .NET runtime.