Heap layout respects modules

[modules]

The kernel heap data structure must exclude from the free heap the
table passed by Multiboot that describes the modules and the modules
itself. There are many possible cases in the possible situation of
these in memory with respect to the kernel itself, but only those two
are handled adequately which are actually presented by GRUB and QEMU;
the rest are handled with fallback solutions that have the possibility
of losing free memory if the loader chooses to load the modules or
allocate the tables high in memory for some reason (which it can
choose to do while remaining compliant to the specification). I also
assume that the modules are loaded one after the other on successive
pages without any free space between them; this is also not mandatory,
but both GRUB and QEMU work like this.