Enable SSE2 explicitly.

Fun fact: this is only necessary for gcc and target x86_32 on
my 32-bit host-system. The x86_32 cross-compiler for my 64-bit host
doesn't need it but seems to enable it implicitly.
I hate gcc!
Fixed constructor calls for clang.

As it seems, clang generates different constructors depending on
whether you build for x86_32 or x86_64. The reverse ones are
used (and required) on x86_32, but not on x86_64. Worse, on x86_64
clang is unable to compile the for-loop correctly. It doesn't
check the condition before the loop and since the array empty it
calls whatever there is at that address. WTF?
Improved print of memory-ranges.
Fixed memory-map handling.

The missing check for < 4G led to very strange effects on x86_32
because we put ranges of physical memory twice in the physical memory
list. Not good!
Additionally, take care that the range-length isn't 0.
Take care that the MCFG table might not be present.

This occurred on QEMU which reports CAP_MSI or CAP_MSIX to be
present but doesn't have a MCFG table so that we have to
fallback to legacy interrupts.