Greatly improve performance of overload resolution, fix various aspects of it

0) Greatly increased performance of the method overload resolution.

1) Redundant code removed from TypeConverter - it does nothing, but strikes performance. Probably some garbage left after refactoring/restructurization.

2) NullReferenceException in TypeConverter.FindBestMatch when trying to find overload to invoke with null-argument.

3) AmbiguousMatchException in IndexDescriptor.ctor when class has multiple public indexers. Also get rid of inconsistency of working with getters and setters separately (i.e. read from one, write to another).
In pure .NET world that's not truth. We never remove items from this dictionary, so double-check locking grants us thread safety in terms of multiple threads entered the same method will return exactly the same result, with only one write operation.

But at the same time I see a bunch of articles about double-checked lock issues in java due to its special compiler stuff. I doubt it's our case, but since JINT is portable library, I agree that it's more safe to lock on every read sacrificing a bit of performance.
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
http://www.yoda.arachsys.com/csharp/singleton.html (third version)

So I'll do the change required. But still if you have some extra knowledge on that, could you please share it? Quite interesting subject...