* chore: fix test timeout helper
using os.Exit(1) kills everything, tests statuses are not always displayed
* chore: refactor WaitFor unit tests
zero-code changes
* fix: WaitFor on first condition
duration must be non-zero if first conditions is true
* feat: add WaitForWithContext
* chore: provide meaningful returned values for WaitFor and WaitForWithContext
All Async* functions should use a buffered channel, so the spawned goroutine can always write its value to the channel even if there is no reader. This allows the goroutine to exit, and the channel to be garbage collected.