Changed some assumptions about the stack layout

It is now assumed that the kernel stack is lower than the ISR stack and
the ISR stack is just below the start of the kernel's code/data.
Made an explicit ISR stack

There is an explicit ISR stack and kernel stack. The ISR save routine
will save the original stack and restore it when it returns.
Added misc. helper functions from Bikeshed64

The four functions have been carried over:

memclr
memset
memcpy
clamp
Added two more symbols to the linker file

It seemed like a better idea to add two symbols that cover the entire
range of the kernel instead of having to check between the different
stacks and other sections. KERNEL_ALL_LO/KERNEL_ALL_HI were added and
encompass the entire kernel, all code, data, and stacks.
Setup basic TSS needed for interrupts

This TSS will most likely not change after this point, unless it is
decided to handle interrupts differently.
Assembly stubs and ISR save/restore routines

Mostly copied over from Bikeshed64, but a few changes were made. Now the
ISR stack saves the original stack pointer and base pointer on its own
stack and restores them after. Normal operating systems would store this
in some kind of process control block, but those hopefully won't exist
in the VM level.
Interrupt initialization code

Doesn't actually do anything with the hardware that would create an
interrupt, but it does setup all the necessary tables. The next step is
to enable the APIC or PIC so interrupts are actually generated. With any
luck this code will work!