Improve subclassing support

This patch resolves some common cases which you could get with subclassing. The most difficult case is:

*Class A (lazy base class)*:
```objc
@interface A : NSObject <BMLazy>
@property (strong) NSString *a;
@end

@implementation A
@dynamic a;
@end
```

*Class B (non-lazy subclass)*:
```objc
@interface B : A
@property (strong) NSString *b;
@end

@implementation B
@dynamic b;
@end
```

*Class C (lazy subclass with lazy super-super)*:
```objc
@interface C : B <BMLazy>
@property (strong) NSString *c;
@end

@implementation
@dynamic c;
@end
```

In that case, collected lazy properties for `C` are `a` and `c`.