refactor tokens

Now every token is just a range position (a combination of origin, start and end).

The only non-essential thing that's left in tokens is literal values,
because they seem to be non-trivial to parse.