multiple improvements and fixes

1. fallback to hybrid sync/async profiling

the full asynchronous profiling introduced in 0.3.5-2 may fail to update
the resource usage of some very short tasks leaving some statistics zero.
synchronous profiling updates stat before handling events.

2. prevent program overrun upon trace_kill()

certain linux kernels may permit a traced program to overrun for a few
instructions even when it has been killed with SIGKILL; and the overrun
may lead to undesired side effect or even security risk. the improved
trace_kill() performs opcode flush and syscall replacement.

3. refactor testing framework to verify the fixes

new test caess are included for verification and benchmark