Factor out TsurgeonMatcher so that Tsurgeon operations using the same TsurgeonPattern can be made thread-safe and don't depend on the order the pattern is applied to trees