extract_unity_shaders.py: Use a significantly faster tokeniser

Tokenising Unity's 3.4MB PrePassLighting shader took ages, now it's
blazingly fast.

It's now a hybrid of this tokeniser and my previous design:
https://docs.python.org/3.4/library/re.html#writing-a-tokenizer

The main reason for the speedup seems to be using a single regular
expression combining all the individual patterns and use of re.finditer
extract_unity_shaders: Remove unecessary string conversions

A while back I went back to simpler tokens that can subclass from str
directly, so I no longer need to explicitly cast to string in a bunch of
places.