Fix a rare bug with downcasts and skeletons.
Performance improvement: further speed up side effect handling.
Previously, loading types was slow during side effect handling.  We now try to avoid it as much as possible by deferring it until after we have evaluated the method call, at which point the type will have been loaded.  We do this by caching offline a map of supertypes and use that to determine whether a given return type will be useful.