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