Initial review only: Performance improvements for Live HTML

Greatly improves structural edit times in large documents during live HTML editing by:

* caching mark ranges (because `mark.find()` is slow on large ranges)
* calculating line/ch positions during tokenizer/parsing instead of relying on `cm.posFromIndex()`, which is slow in large documents

@dangoor