Supporting async functions

This is only an early version. 
My hand-written tests as well as some PDCurses demos are working, but there are still some not working.

This PR is mainly for code review, because I think that the approach has been determined.

A library is necessary to support manipulating async stack frames. asm.js is not supported yet, but it won't be difficult, as there are only number operations (no references to functions)

kripken/emscripten#2482

Function pointers are not supported yet.


Currently function pointers are not handles, and we will check that based on the types. 

E.g.
```
void *func(void);
...
(*func)(); // ⭐️
```

⭐️ is only considered async iff there's any async function of the type `void (*)(void)`. 
I'm still implementing this feature.

Otherwise I think it's irrelevant, e.g.`std::cout << func`. Does it make sens?