Further indy optimization of method calls.

Previous attempts to do this used the guardWithTest approach. However,
this made performance worse, not better. Now we go for a simpler
approach that assumes that despite method calls being polymorphic, in
reality the majority are monomorphic. So it optimizes for that case.
Thanks to other improvements, there's no loss if we're wrong and fall
back to the normal dynamic lookup.