Replace array-based ranges with CharRange and CharPos.

Create classes for holding character positions data.

- The CharPos contains both line/char and absolute character index.
- The CharRange combines two CharPos objects.
- Both have #next method to abstract away the creation
  of the ranges inside Tokenizer.