Full support for async / await

I found 2 types of async methods:

1) Simple methods with 1 or 2 awaits that don't use the switch statement but only breaks
2) Complex methods with multiple awaits inside that use the switch statement

Both are now supported. I also took care of the following:

1) If an async method returns immediately without calling any await method, it still works (see ClassWithFastComplexAsyncMethod unit test)
2) If an async method returns halfway between await calls, it still works (see ClassWithMediumComplexAsyncMethod unit test)
3) If an async method returns after all await calls, it still works (see ClassWithSlowComplexAsyncMethod unit test)
4) If an exception occurs, it still works