x86_64: GS base work

The kernel uses GS base to point to pcpu info, and will make sure this is set
up on entry.  It's also important to reset KERN_GS_BASE before we reenable
interrupts.  The assumption is that on entry from any trap/irq, that the
correct kernel GS base is in KERN_GS_BASE.

We don't actually need to swapgs in trap and irq code, but it'll make it easier
to save the user contexts directly into pcpui->cur_tf in the future.

Also note that we're not even going to bother saving and restoring fs and gs -
just the base registers.  This also goes for ds and es, meaning it is possible
for one application to see the ds of a previous program running on that core.
AFAIK, the hardware just ignores DS and ES's internal registers, so if a
program randomly sets DS, it shouldn't hurt the kernel or another process.