Allow only one "then" in if...else block

Now to find a way to enforce exactly one...
Mark lexer keywords as invalid when out of turn
If an {} block contains ; it's an attrset as well
Once we figure out that a {} block is attrset or function, we match until end
Eat the whole ending part of a function signature
Use lookaheads to chain if sections

This is a neat trick IMHO :grin:
Move whitespace, comments and illegals to a single expression
Allow "or", is an exception in Nix
Better interpolation formatting
Big rewrite with chained rules trick

- split expression in first and next parts
- have each of the components chain next expression when appropriate
- make attrset-or-function absorb ending bracket once type known
Turns out you can still get a backtrack match at EOL

...but you're screwed at the beginning of the line :-/
Remove debugging and unneeded scopes
Mark string quotes as punctuation
Clean up attrset/function matching

Using chained matches allows precise matching of each part
fix comma-first and empty attrset matching

document problems due to regex syntax highlighter
harden if..then..else.. matching
harden inherit keyword; only allow (...) as first arg
Don't chain expression-cont

`nixpkgs/nixos/modules/rename.nix` was getting too deep in the syntax parser stack. Since expression-cont keeps matching parts until end of expression, it's fine to not chain it.
Presume function call on lone words in attrset
Build plist