Tweaks EscapeStore to restore based on index not metadata.
Adds an option to store escaped metadata to CommentsProcessor.
Adds an option to store escaped metadata to ExpressionsProcessor.
Adds an option to store escaped metadata to FreeTextProcessor.
Adds an option to store escaped metadata to UrlsProcessor.
Adds more advanced tokenizing.

* We'll be able to hold more information about tokens now.
Rewrites property tokenizer to use string traversing.
Adds a more performant version of rebuilder.
Reworks simple & advanced optimisations to use metadata.

* We can avoid merging, splitting, and mapping by using token metadata directly.
* Unfortunately it means metadata has to be updated as we go.
Renames variables in advanced optimiser to match others.
Clarifies conditions in advanced processing.
Refactors advanced optimizer to get rid of functions in loops.
Moves cleaning up tokens out of tokenizer.

* Pulls out extracting logic into an utility class.
Adds line/column tracking in tokenization.
Adds source file tracking to source maps.
Extracts rebuilding tokens into Stringifier class.
Changes minify method output to handle multiple outputs.
Fixes line tracking in blocks (@media, @font-face, etc).
Fixes stray whitespace tracking in blocks (@media, etc).
Adds source map stringifier.

* Stringifying with source maps "on" requires doing it in different order.
* Basically restoring escaped data has to be done on every token rather than at the end.