x86: add recursive irq disable, tighten related asserts

This caught an invariant violation where return_from_exn() was called in
return_to_scheduler() with interrupts disabled when it was entered from the
timer interrupt's preemption clause. While that doesn't hurt, it revealed that
interrupts weren't being processed through some callers of r_t_s(), (i.e. the
extra long irq0 case), which they should. The cost of fixing this is a
somewhat messy test-and-enable before rfe().
thread: clean EFLAGS given in ExchangeRegisters

No disabling interrupts or changing IOPL, plz
add L4_UserDefinedHandleOf() to <l4/thread.h>
testbench: thread: add test for TCR preservation over UTCB relocate

As expected, this fails on the latter two test points.
thread: retain TCRs over UTCB relocate

The spec doesn't say this clearly, but I figure it should be the case.
ThreadControl's other parameters are retained, so Pager should too.
thread: make space->utcb_pages alloc even lazier

A quick game of "hide the calloc()", so to say.

This changeset's gain is mostly in documentation: it says that
t->utcb_ptr_seg != 0 implies sp->utcb_pages != NULL, which is ensured by the
same function having run when some thread in @sp had utcb_ptr_seg == 0 in the
past.
testbench: ipc, sched: remove forking from preempt_case, ipc_case

These should be reinstated once the fix described in r_recv_timeout_case()'s
comment is implemented.
testbench: sched: add test for Schedule permissions

Three parts: that it passes in the local address space, that it passes
remotely when the remote thread's Scheduler is MyGlobalId, and that it fails
(with the right ErrorCode) when the remote thread's Scheduler is its own ID.
sched: add access check to sys_schedule()
testbench: sched: add test for error on sub-UserBase TIDs

The skip clauses haven't been tested.
sched: test for user TID range in sys_schedule()