Fix generic non-virtual method call in Ready-to-Run images
Issue dotnet/coreclr#5201 revealed a bug in the Ready-to-Run implementation.
This bug can cause the runtime to dispatch a method call to the
wrong target when all the following conditions are met:
* A shared generic method in a Ready-to-Run module calls a method
in a shared generic class.
* The target is a non-virtual instance method, but is called through
callvirt instruction (as C# compiler normally does).
* The target is in a different module.
* The target method is defined in a base class, while the actual
object instance is of a derived class.
This commit fixes this bug by changing a virtual call to a regular
call when the target is non-virtual.
Commit migrated from https://github.com/dotnet/coreclr/commit/
4fd217d564b743f995426de7bd642166e0a84849