Fixed another problem.
Refactored worker_thread a little and removed a possible bug.
Made necessary changes to CMake files to add a dependency on libuv.
Added a dependency on libuv.
Implemented a kind of condition variables adapted to run with
coroutines.
Made a ton of changes everywhere to integrate them.
Fixed a hidden bug in queue::swap() where we would lock a mutex twice
and never another one.
I didn't know that when a boost::context finished it calls exit().
After a very exhausting debugging process that led me to that discovery
I fixed many other problems in the code.