Let's have kind of plan. Here is what i have in mind.

* Study common lisp hashtables (http://www.lispworks.com/documentation/HyperSpec/Body/18_.htm) and clisp implementation in hashtabl.d (there are few extensions to the above standard, e.g. weak relations).
* Study and understand lock free hash table (http://www.azulsystems.com/events/javaone_2007/2007_LockFreeHash.pdf). Check clozure implementation. IIRC, you will need cas & mutex for this.
* Implement cas and use it instead of testandset. Required mutex implementations are available.
* Start coding and replacing hashtabl.d implementation

Meanwhile you will get common with clisp (some) internals. 

As for you questions:

1. Always use mercurial checkout when consulting code. The link above is to old cvs repo that was not updated for quite some time.
2. win32 condition variables - it will be nice to use native ones but this is not the goal of the project. I would not put too much efforts on this at that stage.
3. There is no need to have 'full grasp' of mutex internals in order to use it. package.d is a place to consult for the usage.