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 leave a killed program to overrun for a few
instructions; and the overru may lead to undesirable side effects or even
security breach. the improved trace_kill() performs opcode flush and
syscall replacement to minimize the side effects.

3. refactor testing framework to verify the fixes

new test caess are included for verification and benchmark