Introduce sampling profiler
trace: support for corelating samples on argument
trace: introduce TIMED_TRACEPOINT macro

This macro defines a tracepoint pair which allows to time a code
block.

It also defines a helper class which uses RAII pattern to invoke the
tracepoints. This is especially useful when the code we want to time
has gazillioon of return points and we want to cover them all.

The macro requires a corelation argument to support call nesting.

Example:

TIMED_TRACEPOINT(tcp_do_segment, "so=%x", struct socket*);

void tcp_do_segment()
{
   time_tcp_do_segment{so};

   ...
}
tests: add test for callout resetting performance
tcp: add tracepoints for packet processing
lfmutex: rename lock_wake tracepoint

If it will be named "lock_wait_ret" it can be paired with lock_wait to
create a timed sample.