maps: determine region type and load address

The region type can be one of the following:
misc  (default),
code  (belongs to library or executable),
exe   (belongs to the executable),
heap  (is the heap region),
stack (is the stack region)

The types misc, heap and stack are single regions which can be
determined easily. But code and exe are special. In the executable
or when loading a library, there are often three or four
consecutive regions belonging to it:
0: read,exec; 1: read; 2: read,write; 3: read,write (no file name)
0: .text; 1: .rodata; 2: .data; 3: .bss

Scanmem only cares for regions 2 and 3. But with address space
layout randomization (ASLR) and PIC/PIE the load address of the
code (start of region 0) is randomized. Subtracting the load
address from a found memory address within a code region can show
us the static memory address within the binary. This is why the
load address is important and should be determined. For other types
the region start is used.

Further commits using the region type and the load address follow.
handlers: improve pointer output

The pointer format should not only be used for the 'list' command
but e.g. for the 'lregions' command as well. Also '%20p' is too
long as, on x86_64 at least, there are only 6 bytes used for the
memory address. We can also get rid of the '0x' to shorten it even
further. So change it to '%12lx' for 64 bit and '%8lx' on 32 bit.

We've also noticed that there is no 'ULONGMAX' define. The correct
name would be 'ULONG_MAX'. So rename it and add a compiler warning
in case it's not defined.
lregions: show region type and load address

This gives us the information if a region belongs to a library or
an executable and to which location these are loaded into memory.
handlers: show match region info with 'list' command

It makes things much easier if the 'list' command not only shows
the match info but the associated region info as well. Display the
region ID and the region type to get a feeling in which kind of
memory region a match is located. Subtracting the load address
of the executable or library from the match address allows us
to calculate a match offset which is the variable address within
the binary. This helps bypassing address space layout randomization
(ASLR). So display it.

The GUI needs to be changed in following commits to recognize the
new format.
gui: add match offset and region type support

The format of the scanmem 'list' command has changed. So the GUI
has to be changed as well. The match offset from the code load
address or region start as well as the region type are also
useful in the ScanResult_TreeView. So add them to new columns.
Merge pull request #25 from sriemer/for-wanglu

introduce region type and load address support