measure async natives per promise

@marco-c I think this is correct, as async native calls can overlap, so calculating their execution time only by method key could cause inaccurate measurements. This change calculates the execution time per promise.