MCS queue based lock with timeout and suspend
MCS queue based lock with timeout and suspend. Offers improved performance over the existing BlockingQueue based FredMutex with timeout.
Originally inspired by https://www.cs.rochester.edu/u/scott/papers/2001_PPoPP_Timeout.pdf and https://www.cs.rochester.edu/research/synchronization/pseudocode/timeout.html#mcs-try.