[delegate] Add functions to create cached delegate trampoline informations
[delegate] Add generics support for new cached delegate information
[delegate] Update cache when going through mono_delegate_trampoline

This allow the next delegates with the same class and method as a previous delegate to not go through mono_delegate_trampoline, which is slow. This allow huge speedups in cases where we create the delegate in a loop for example.
[delegate] Edit AOT target to return the delegate cache information

Previously, only invoke_impl was returned as the target.
[delegate] Add optimisation for delegates to virtual methods
[delegate] Fallback to slow path if there was an error while creating the delegate trampoline
[delegate] Remove duplicate code between handle_delegate_ctor and handle_delegate_virtual_ctor
[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