An awaitable semaphore class for the .NET's TPL library which can be used similar to the conventional `lock` block.