Preemption recovery doesn't change TLSs

Instead of changing TLSs to get at current_uthread, we figure out the linear
address of the remote vcore's current_uthread and access it directly (from
within our usual TLS).

Aside from removing two potentially expensive TLS changes, this also simplifies
and clarifies the code.
x86: fixes initialization errors in page_alloc

If the kernel's end symbol was page aligned, pa64_is_in_kernel() would
inaccurately report that address as being in the kernel.  That page actually
can be free.  check_range() was catching this.  Luckily, the error was in the
safe direction; we were marking a free page as busy.

The ROUNDDOWN fix is similar.  Check the comment for details; we're mostly
ignoring the issue for now.