Add Prolog Lexer

this closes #28
prolog: Make the atom regex more concise
prolog: yield Literal.String.Symbol for atoms
prolog: bugfix: variables should only contain word chars

This was causing the lexer to be extra greedy and have variables named
things like `Rest)`
prolog: use a shorter demo
Merge branch 'prolog'