Refactor parseObjectProperty to simplify conditional logic.
Remove IllegalYield error and decompose matchYield helper function.

Outside of generator functions, 'yield' is now treated as a normal
identifier, so there is no longer such a thing as an illegal 'yield'
expression, per se. Now, the failure mode is that a 'yield' token might
not be parseable as an identifier (as in 'yield x').
Support async function declarations/expressions and await expressions.

This includes support for async arrow function expressions.
Add tests of async functions and await expressions.
Always treat async and await as contextual keywords.

This treatment means these tokens can be used as identifiers even in
strict mode (provided their syntactic positions do not require a special
interpretation).