rwlock: replace condition variables with waitqueues

Waitqueues fullfil the same role as condition variables, but are much lighter
since they rely on an external mutex, which is already provided by rwlock.

Replacing condvars by waitqueues significantly reduces the size of an rwlock,
and in addition reduces the number of atomic operations in contended cases
significantly.

Reviewed-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Avi Kivity <avi@cloudius-systems.com>