py: add async/await/async for/async with syntax

They are sugar for marking function as generator, "yield from"
and pep492 python "semantically equivalents" respectively.

@dpgeorge was the original author of this patch, but @pohmelie made
changes to implement `async for` and `async with`.
diff --git a/py/repl.c b/py/repl.c
index de0e8a4..7bd8759 100644
--- a/py/repl.c
+++ b/py/repl.c
@@ -57,6 +57,9 @@
         || str_startswith_word(input, "with")
         || str_startswith_word(input, "def")
         || str_startswith_word(input, "class")
+        #if MICROPY_PY_ASYNC_AWAIT
+        || str_startswith_word(input, "async")
+        #endif
         ;
 
     // check for unmatched open bracket, quote or escape quote