space, thread: add scalable LTID lookup, UTCB page storage

To wit, this changeset replaces the ->utcb_pages array in <struct space> with
a hash table keyed by a 16-bit UTCB area offset. That adds a layer of
indirection but lets a client use something like a 256 MiB UTCB area, enough
room for 512k threads, without forcing the kernel to spend 512KiB of
non-replaceable address space just to track the _page slots_ for bits of
various threads-in-potentia. Slab allocation of the extra layer's structures
also reduces malloc traffic from space.c .

In addition, the new <struct utcb_page> keeps pointers to the actual threads,
replacing a linear search on space->threads (which was removed) with a hash
table lookup. This is slower than a linear search on a very small number of
threads (like, fewer than five, and then only from a hot cache) but faster
from then on out; it also avoids a lookup on the potentially busier systemwide
thread_hash.

The efficiency of thread_get_utcb() is maintained by having each thread point
to the UTCB page they've been activated in.

Miscellaneous changes:
  - initialization of kernel_space was explicitly divided in two: creation and
    finalization.
  - added the space_name() function which can be used for debugging and for
    determining whether there's at least one active thread within a particular
    space.
  - invariant checks in space.c were updated, and some checks added to verify
    the occupant map in <struct utcb_page>.