Memory map parsing

Parse the bootloader-provided memory map and get the available memory. This also fixed a bug: multiboot information isn't pushed into the stack before calling kernel_main.