Use #defines for # page directory/table entries
Fix memory detection for higher half

The way we do this is to find two unused logical addresses in
the kernel's page table.  For each entry in the multiboot memory map,
we map that physical address to one of the logical addresses we found
earlier, and we write a free pages structure into the beginning of that
page.  We alternate which logical page is used for the current step;
that way, the other logical address points to the previous entry in
the memory map, and we can alter its next pointer to point to the
entry we're currently working on.  This approach assumes we have at
least two free page table entries in the kernel's page table, so
this approach will have to be changed (but not by much) when the kernel
grows beyond (4MB - 8KB) in size.
Re-enable memory detection
Unmap the logical addresses we use for memory detection