Make JoinMatcher abstract, specialize cases

There are quite a few of them!