x86: fixes read_tsc_serialized()

The compiler was reordering operations (stores, in one case) past the
serialization.
x86: fixes early core_id() calls

Ever since we set up minimal paging in assembly, we were unable to access the
LAPIC (and therefore coreid) until the LAPIC was mapped in during vm_init().
This prevented the newer panic and warn from working, and totally killed
spinlock debugging.

Previously, we had a full "virtual" KERNBASE mapping (in 32 bit) with
segmentation.  I think those attempted accesses of the unmapped LAPIC were just
silentely returning 0, which is the 'right' answer at that stage of bootup.
Either way, now that paging is on, unmapped LAPIC accesses would page fault and
trigger a reboot since the IDT isn't set up yet either.

Any callers of core_id() that can happen before vm_init() need to use
core_id_early().  I'm not overly concerned about code reachable via the
monitor, since if you got there, it's by a panic and we should already be
working on that problem.  If this is too much of a burden, we can just put the
bool check in core_id(), and take that potential cache miss on every call.
x86: fixes backtrace bug

Was using func_name after freeing.
x86: fast core_id() option

Implements core_id() with rdtscp.  VM support for rdtscp can be a bit
spotty.  If you want to run with this, try it once without, and see if
the kernel detects support for rdtscp (in the bootup output).  If so,
you're good to go.
x86: smp_boot no longer uses smp_call_*

Instead, we have a dedicated IRQ vector that does nothing but return.
This is enough to break the non-core0s out of their hlt.

Other than it being nice to not need the ancient smp_callsi_ (which
might go away), this is needed if you run with FAST_COREID.  Before,
smp_call_ would trigger a full irq_handler(), which increments pcpui
irq_depth, before core_id() is ready.  The other option would be to use
a core_id_early() call in irq_handler(), which I dislike.

Also, don't repurpose the POKE_HANDLER() without thinking about how it
might interact with abort_halt().