Huge refactoring. New protocol now match() has to be explicitely called. Also introduced factories for matchers.