[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 ();
    }
}