what's the point of explicitly declaring functions "async", and then explicitly saying "await". IMHO all this could be done automatically by language.
Not backwards-compatibly. You'd need to make every function async and every value a future/promise (semantically at least, then optimise most cases back to sync somehow, which incidentally means possible behavioural changes based on what the optimiser manages or doesn't manage to syncify).