add better operator/advancing support

This adds the ability to "not match" something, but then not advance the parser `!`. And also, match something and not advance the parser `&`. Don't really like these symbols, but it works for now. Probably will refactor again to something easier to understand at some point.