Rewrite the parser to treat whitespace more uniformly

Move the handling of whitespace from the lexer to the parser.