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).
The lock is double-checked (before and after) to avoid unnecessary locking.