New lexer

This consolidates the commits in the `lexer` branch.

The tests now pass, but `test-everything` does not. The main issue seems to be things like

```purescript
f = do
  return x
  where
  x = 0
```

in which a `where` block is indented at the same level as the current nested block.

I also still need to fix some issues in psci.