Use lookupMethod to restore checking superclasses

And inherited protocols too.
Handle @property declarations with custom getters for KVC collection proxies

This allows code like:

    @interface Foo : NSObject
    @property (nonatomic, getter=objsKVCProxy) NSArray *objs;
    @end

    @implementation Foo
    - (NSArray *)objsKVCProxy {
        return [self valueForKey:@"objs"];
    }
    - (NSUInteger) countOfObjs { return ...; }
    - (id)objectInFoosAtIndex:(NSUInteger)key { return ...; }
    @end

    void caller(Foo *f) {
        id = f.objs[13];
    }
Respect -Werror (treat warnings as errors)