esp8266: Implement task-based, event-driven interface with UART.

This enables proper interfacing with underlying OS - MicroPython doesn't
run the main loop, OS does, MicroPython just gets called when some event
takes place.
diff --git a/esp8266/main.c b/esp8266/main.c
index 68d015a..86f306c 100644
--- a/esp8266/main.c
+++ b/esp8266/main.c
@@ -52,6 +52,12 @@
 
     printf("\n");
 
+#if MICROPY_REPL_EVENT_DRIVEN
+    pyexec_friendly_repl_init();
+    uart_task_init();
+    return;
+    goto soft_reset;
+#else
     for (;;) {
         if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
             if (pyexec_raw_repl() != 0) {
@@ -65,6 +71,7 @@
     }
 
     goto soft_reset;
+#endif
 }
 
 mp_lexer_t *mp_lexer_new_from_file(const char *filename) {