Properly seperate matches in matches for nodes and matches for annotation on nodes

Especially for reflexivity we have to distinguish between matches that match an annotation or the node itself. As long as there is only one annotation per node this is obviously not a problem, but there were some rare corner cases where our reflexivity semantics did not work as expected.

This branch implements these explicits semantics. It will also fix the rare corner cases where the old implementation lead to unexpected results. Additionally the coded was cleaned up and simplified (e.g. I removed the possibility to have more than one mode)