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 collected VariableProxy nodes are passed
to ParseArrowFunctionBody. This needs a special case for handling
the empty argument list "()", as ParseExpression expects parenthesized
expression to not be empty. In this last case, ParseExpression will
return NULL, meaning that the parameter list is empty.