Read include/zkThread.h for API info.

Windows implementation:

	Should be reliable and stable. The APIs are designed to be trivial to implement on windows, in the hope that this will minimize the risk of injecting new bugs into stable code.

Gotchas:
- the implementation of zkThreadOnce is not atomic the first time it is invoked. This could be fixed by using an Interlocked* implementation.

- the implementation of zkThreadCreate creates a TLS key the first time it is invoked in a non atomic fashion. This could be fixed by using zkThreadOnce, if zkThreadOnce is made atomic.

(other misc. issues are noted in comments in the code)

Linux implementation:

	Should be pretty reliable and stable. I've tested the code quite a bit and haven't found any major problems. The implementation is more complex, and could contain subtle bugs.

Gotchas:
- zkITimers use busy waiting to improve accuracy. Busy waits are only done for 10ms bursts, which for normal timer durations do not cause significant CPU load. Setting timers for intervals that are close to 10ms, will change this, however, and zkITimerCreate will return an error if a caller tries tocreate a timer with an interval less than 20ms (TIMER_FUDGE << 1). This is all controlled by a macro, TIMER_FUDGE, which can be set to zero to kill this behaviour. Freedom currenly only uses timers with very long intervals, so the added accuracy is worth the tiny increase in CPU usage IMHO.

~ol <oliver@zks.net>

