[runtime] Implement lazy resolution of array interfaces.

To resolve casting we make all relevant interfaces to use the generic variance casting code.
This only affected ICollection`1 and IList`1, which are not terribly popular.

To fix dispatch we augment vtable resolution to treat those interfaces as variant and use
the already in place machinery.

Memory reduction numbers for the corlib test suite:

Initialized classes 8004 -> 7470 (7% reduction)
Corlib mempool size: 2719832 -> 2678872 (1.5% reduction)

Inflated classes 4500: 3.972 (12% reduction)
Inflated signatures size: 166128 -> 139812 (16% reduction)
Inflated methods size: 565152 -> 485664 (15$ reduction)
[runtime] Remove a bit chunk of what's dead code now.