[delegate] Improve trampoline caching

I think this won't work with an explicit this delegate to a virtual method.

ldnull
dup
ldvirtftn void Foo:VirtualFoo()
newobj Action<Foo> (object, native int)

Can you write a test for this?