MCS queue based lock with timeout and suspend

Merged Matthew James Cameron May requested to merge mjcmay/libfibre:mcs-timeout-queue into master

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.

Merge request reports