improved VersionMatcher contract

- chain finds the first matcher that canHandle() a selector, then delegates to that matcher
- canHandle() returns false -> no other methods called
- clients must not call accept(String,String) if metadata is needed
- adapted and improved specs, added missing specs
- cleaned up VersionRangeMatcher (deleted obsolete method, moved methods around)