Code Review: TypeInferenceBugs (take 2)

tfpt review “/shelveset:TypeInferenceBugs;REDMOND\tomat”
Comment :
Fixes bugs in type inference:

1) By-ref generic parameter
public void Foo<T>(ref T x);


2) Multiple generic parameters
public IEnumerable<TResult> Select<TSource, 

TResult>(IEnumerable source, Func<TSource, TResult> selector);

3) Generic arrays
public int Foo<T>(T[] x);

4) Type shape difference
public static int f5<T>(Dictionary<Dictionary<string, T>, 

Dictionary<int, T>> arg);
C.f5( DictionaryList[str], Dictionary[int, str] )

In general type inference seems to need more test coverage - various 

type shapes, arrays, ref/out with and w/o strong boxes, params array,
params dict, optional, named combinations.
I’ve added a few tests for the cases above to Ruby unit tests.

Implements IInferableInvokable on blocks so that they can be coerced
to Func<object*> and Action<object*> delegates:[1,2,3], lambda { |x| x + 1 }).each { |a| puts a }