Basic thread operations
=======================

This section describes the threads structure.

 -- procedure: spawn thunk [name] returns thread
     Spawn constructs a new thread and instructs the current thread scheduler to commence running the new thread.  NAME, if present, is used for debugging.  The new thread has a fresh Fluid/dynamic bindings, dynamic environment.

There are several miscellaneous facilities for thread operations.

 -- procedure: relinquish-timeslice returns unspecified
 -- procedure: sleep count returns unspecified
     Relinquish-timeslice relinquishes the remaining quantum that the current thread has to run; this allows the current scheduler run the next thread immediately.  Sleep suspends the current thread for COUNT milliseconds.

 -- procedure: terminate-current-thread returns (does not return)
     Terminates the current thread, running all dynamic-wind exit points.  Terminate-current-thread obviously does not return.

Threads may be represented and manipulated in first-class thread descriptor objects.

 -- procedure: current-thread returns thread
 -- procedure: thread? object returns boolean
 -- procedure: thread-name thread returns value
 -- procedure: thread-uid thread returns unique-integer-id
     Current-thread returns the thread descriptor for the currently running thread.  Thread? is the thread descriptor disjoint type predicate.  Thread-name returns the name that was passed to spawn when spawning THREAD, or #f if no name was passed.  Thread-uid returns a thread descriptor's unique integer identifier, assigned by the thread system.