Use a single condition variable per io_service.

This change fixes a potential race condition when using run_one() from
multiple threads. It also paves the way for the future addition of
timed io_service::run() overloads.