Attempted to finish ReentrantLock...
I went a different direction, instead of using the locked thread as an AtomicReference, we have 3 states.  This was necessary because I could not figure out how to atomically know if we need to unpark a thread (because adding to the queue is a seperate step), and I want to make it so if we replace the LinkedList with a concurrent structure, we could easily remove all synchronization.

The problem remains that I don't know how to implement Conditions on top of this implementation though.  That will require greater thought.