[delegate virtual] Improve trampoline caching

Improve delegate caching for delegate to virtual functions, depends on https://github.com/mono/mono/pull/1150.

With this patch, we see a 12x execution speed improvement in the following micro-benchmark :

	using System;
	
	class Bar {
		public virtual int Test () {
			return 20;
		}
	}
	
	class Foo : Bar {
		public override int Test () {
			return 10;
		}
	}
	
	class Program {
		public static int Main (String[] args) {
			long n = 50000000;
			if (args.Length > 0)
				n = Math.Max (n, Int64.Parse (args [0]));
	
			Bar a = new Foo ();
	
			for (long i = 0; i < n; i++) {
				var f = new Func<int> (a.Test);
				if (f () != 10)
					return 1;
			}
			return 0;
		}
	}