fix regexs to deal with hard delimiters

A few key changes here
* Added the concept of a "hard" delimiter (something that cant be contained in another word, ie }} or <)
* `MakeEntry` now generates 2 tokens for "soft" delimiters, one checking for it being broken by a hard delimiter, and one checking for it hitting the end of the template
* The Tokenizer checks for `captures[1]` instead of `captures[0]`. Since the tokens can now mach something like `each%}`, it became necessary to land `each` in a group, and I was able to unify them all on `capture[1]`, rather than flipflopping between 0 and 1 conditionally. 
* moved whitespace to check `\s` (which is `\\s` in js sometimes because js is retarded, as much as i love it). Reads cleaner, and way, way easier to debug.