Updated operator tokenizer and added states to nix lexer

It now skips group modifiers that begin with `?`, only matches `-` at the appropriate times (after a character is seen but not after a character is seen that ends a range and not just before `]`), updates the lexer state to handle regex_class_begin, regex_group_begin, and regex_class_range_middle
Added regex character tokenizer
Added a couple tests for regex operators. Added exceptions that I forgot to add to previous commits.