[delegate] Fallback to slow path if there was an error while creating the delegate trampoline
[delegate] Move variable from global to switch level context.
[delegate] Allocate a new vreg for each load/store
[delegate] Fix virtual function call in generic class

It consist in passing the "virtual" argument along the class and method, allowing the creation of a trampoline to a virtual methods in the generic and the AOT cases.

The following test case would previously fail by returning twice the value 10 :

using System;

class Foo <T> {
    public virtual int Test() { return 10; }
}

class Bar<T> : Foo<T> {
    public override int Test() { return 20; }
}

class Test<T> {
    public void Run () {
        var arr = new[] { new Foo<T> (), new Bar<T> () };

        foreach (var i in arr) {
            Func<int> f = new Func<int> (i.Test);
            Console.WriteLine (f());
        }
    }
}

class Driver {
    static void Main () {
        new Test<string> ().Run ();
    }
}
[delegate] Refactor mono_create_delegate_[virtual_]trampoline_info
[delegate] Deactivate optimisation if in virtual function case and the platform does not implement mono_arch_get_delegate_virtual_invoke_impl
[delegate] Revert MonoDelegate method field emit store to fetch from the rgctx
[delegate] Deactivate virtual functions delegate optimization