Updates multiboot code for amd64

The old version was 64-bit incompatible (assumed longs were 32 bits).
The FSF has a newer version anyway.

Note our old style of determining which memory to use only works for the
first 3GB or so of pmem (at least on my test machines).
x86_64 boot up

Gets into long mode, maps 512GB of KERNBASE in 1 GB pages.
Physical memory init uses multiboot info

The old style of trusting only the BIOS memory detection, would miss out
on pmem above 4GB.  Additionally, we were assuming the area from right
above the kernel til the end of extended memory was free, instead of
checking the mmap ranges.

Now we parse the multiboot info to figure out which memory ranges are
really free.  Additionally, we use the largest range (which might not be
the one the kernel is already sitting in) for our boot allocator.
Systems with obscene amounts of RAM (256GB) will need more RAM than fits
in extended memory (~6GB for the pages array).

Anyway, we try to handle situations whether or not the kernel is in the
boot allocator zone, whether the zone is larger than addressable
physical memory, and a bunch of other things.
Fixes bug with 64 bit linkage

The old style of tricking grub with the linker script is a bad idea.
Using objcopy instead.  For more info, check out:

http://forum.osdev.org/viewtopic.php?p=223931#p223931
Stops using boot_alloc during vm_init

Now calls vm_init after fully setting up the free page list.  One
requirement of this is that we have all available physical memory mapped
into the boot page tables.  Our current page allocator gives them out in
reverse order, so we start right below max_paddr.  We're good up to
512GB on amd64.

The benefit of this is we don't have to deal with calling boot_alloc in
our vm_init code, which cleans things up a bit.
Reworks memlayout (XCC)

Adds a memlayout for 64 bit x86, and reworks it slightly for the other
arches.  Everyone needs to specify UVPT and BRK_END, for instance.

Probably should reinstall your kernel headers and rebuild userspace.
x86: 64 bit pmap code

Page table walking, segment inserting, etc.  These ones are more
powerful than what the main part of the kernel expects, mostly in the
realm of jumbo pages.  We'll have to start using (and testing) them more
thoroughly.
X86: initializes the 64 bit IDT and TSS

The IRQ handlers aren't fixed yet.
Makefile rebuilds binary objects on subarch change

When changing back and forth between 64 and 32 bit, old binary blobs
that we link into the kernel were not being updated, causing linker
errors.  Instead of requiring a make objclean, this detects those cases
and removes the old objects (KFS and EXT2 blobs).
Fixes pointer size error