libmemdisc: introduce uintptr_t handling

Calulating with (void *) for memory addresses is really cumbersome
with a lot of conversions between pointers and integers of the size
of a pointer. In order to simplify that, store all memory addresses
as uintptr_t.

The printf() and scanf() format specifiers need to be changed to
PRIxPTR and SCNxPTR. Also the limits are different with
UINTPTR_MAX. But uintptr_t is optional and may not be available.
So use unsigned long in that case unless it is 64 bit Windows.
There we need unsigned long long.

Do this for libmemdisc only first as it doesn't rely on other code
and communicates via FIFOs.
libmemdisc: fix and enhance backtracing

GNU backtrace doesn't work with _Znwm()/_Znwj() with PIE on Ubuntu
14.04 trusty. So increase the maximum depth for GNU backtrace()
from 3 to 4.

Add more checks and the possibility to use code addresses
unfiltered as well. Display the resulting config after PIE handling
for debugging.