Fix AnnotationDriver always overriding inherited fields

This PR builds upon #704.

The AnnotationDriver should skip processing of "inherited" fields (in the ClassMetadata sense) in order to be consistent with ORM; however, that alone would lead to redeclared fields in child classes being ignored (see #435). Therefore, we should only skip "inherited" fields that are also not declared in the current class. That is the change originally implemented in #704, and this PR adds more test coverage and some refactoring to #435's regression test.