Auto-register property matchers: add interface for PropertyMatcherRegistry.

Having a registry interface enables passing a registry to the PropertyMatcher
constructor and have it auto-register. This will make merging generated code
easier when code generators have to deal with adding PropertyMatchers to
existing composite matcher classes.
Trivial re-organisation of constructors in PropertyMatcher.
Auto-register property matchers: provide PropertyMatcher with constructors that take a PropertyMatcherRegistry
and register with it.
Auto-register property matchers: remove PropertyMatcher constructor that does
not take a PropertyMatcherRegistry.

This is less convenient when PropertyMatchers are used in isolation, but
should help to avoid a likely bug where PropertyMatchers are not registered
when they should be in the common usage scenario where they are a member
of a CompositePropertyMatcher.