Resolves #31912
Based on #31278
Returns error.Timeout if provided timeout expires before a permit is available.
Also adds/reworks tests for all semaphore wait functions.
Resolves #31912
Based on #31278
Returns `error.Timeout` if provided timeout expires before a permit is available.
Also adds/reworks tests for all semaphore wait functions.