Implemented another approach to handle hardware breakpoints, etc.

The implementation is experimental.

1. HW breakpoints can now be set and cleared from any context (process,
IRQ, softirq, ...). The basic
API is now provided (see hw_bp_set() and hw_bp_clear).

On the current CPU the HW BP is set and cleared directly, timers are
scheduled on the remaining ones to do so there.

Part of the implementation is based on the code from Perf and KGDB.

2. System-wide workqueues are now used instead of the custom one.

3. Got rid of the addr_timer, replaced it with a delayed work.

4. Many minor cleanups and fixes have also been made.
Fixed: race counter was not updated when needed
Silenced some debug messages
Fixed calculation of the address and size of the accessed memory area

1. Several corner cases were not taken into account (addressing w/o
base or index register, etc.), this is now fixed.

2. Implemented the calculation for x86_64 too.

3. Implemented a preliminary support for string instructions. The
system will now treat them as if they accessed a single item (i.e. as
if no REP* prefixes were present).

The full support for such instructions (incl. handling of REP*, CX,
direction flag, both memory areas for MOVS and CMPS) should be added in
the future.

4. The size of the accessed memory areas is now used to calculate the
length of the area to be covered by the hardware breakpoints.

5. Added handling of XLAT, this instruction is sometimes present in the
kernel modules too.

6. Made some minor improvements and fixes.
Fixed a printf specifier and the type
Turned off special handling of locked updates

KEDR or KernelStrider need to handle these because these are also memory
barriers. Racehound does not need to, however.
Turned off some debug messages; made cosmetic changes
When a race is found, info about the both racing insns is now shown
Defer setting of SW BPs if the target is initializing itself

Currently, it may be unsafe to track the execution of the target
while it performs its initialization. To be exact, it may be
unsafe to use kallsyms to resolve the names of the symbols (directly
or indirectly via %pS in printk(), via dump_stack(), etc.)
concurrently with the operations the module loader performs right
after the init function of the target returns.

In some kernel versions, the loader evicted the init-only symbols
from the symbol tables at that point and accessing the symbol tables
for the target module resulted in a race with unpredictable
consequences, including occasional crashes.

This commit makes sure that  we do not set the software BPs if the
target's initialization is still in progress. The delayed work to set
the BP is scheduled as usual, however, so the breakpoint should be set
eventually.

Unfortunately, this prevents RaceHound from detecting races during the
initialization of the target. In the future, this limitation should
be removed somehow.
Implemented repeated read checks

Similar to MS DataCollider, RaceHound now checks if the memory area
that is about to be accessed by an instruction, changes during the
delay. If it does, RaceHound reports a race.

Such repeated read checks are performed only if the HW BPs find no
races during the delay. If they do, they provide more information
about the races (they show both racing instructions rather than only
one), so they have a priority.
Fixed: less memory than needed was allocated for function name
Removed one more debug print
Merge pull request #3 from euspectre/hwbp_new

Added a new mechanism to set and clear hardware breakpoints