Parse strings, track parsing position, better REPL.

Convert the parser to use an enum for tokens, instead of plain strings,
adding in the ability to tokenise strings properly (e.g. `(foo "a b c")`
calls foo with one argument). Also, track the current column and line number
while parsing.

The REPL now prints the pretty-printed result, and gives slightly nicer error
messages on failure. And, use readline to get command history and working
arrow keys.