Adds support for matching by interface.
Refactors member specifications for consistency.
Considers type variance in property specification.
Considers type variance in field specification.