Previously event tried to read its value in event::wake_observer, which required jumping through some hoops in how wait_queue was designed, so that a value wouldn't be wasted if the wait_queue was empty. Now, read the event value in event::wait after returning from the thread::block call instead, which simplifies the whole process and lets us simplify the wait_queue API as well.