Fix threads on Darwin 10.8
* We used to pun (64-bit) addresses into 32-bit mach_port_name.
* We used to assume arbitrary 32-bit addresses were always
acceptable mach port names.
* Stop doing that. Instead, allocate small descriptors until one's
address is an acceptable port name (inspired by CCL).
* Also, keep a lock-free free-list of descriptors to skip the previous
loop in common cases.
* There are still some strange issues, but I can't tell if they're new,
and they seem preferable to consistently lose-ing when spawning threads.