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.