Implement handling of arrow functions in the parser

Arrow functions are parsed from ParseAssignmentExpression. Handling the
parameter list is done by letting ParseConditionalExpression parse
a comma-separated list of identifiers, and it returns a tree of
BinaryOperation nodes with VariableProxy nodes as its leaves, or a single
VariableProxy if there is only one parameter. When the arrow token "=>" is
found, the VariableProxy nodes are pased to ParseArrowFunctionBody. This
needs a special case for handling the empty list "()" as ParseExpression
expects parenthesized expressions to not be empty. In this last case,
ParseExpression will return NULL, meaning that the parameter list for
the arrow function is empty.
Source pprint, runtime stuff