Today we dispatch to the correct matcher(s) based on the PackageType() returned from any given matcher. This isn't very flexible, since it doesn't allow for the ability to introspect package values or metadata to understand if it could make a match.
We should make a (breaking) change to the Matcher interface to allow for more flexibility here.