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.

2. prevent program overrun upon trace_kill()

some linux system allows a program to overrun for a few instructions even
when the latter has been stopped and killed with SIGKILL. the improved
trace_kill() performs opcode and register rewrite to prevent undesired
side effect of the overrun.

3. refactor testing framework to verify the fixes