Change design.

There is an overhead linked list, containing the ucontext_t
All ucontext_t now link back to main thread
The wait_all function now runs in a loop until all thread finish
wait_all() now mannually swap into the next thread to be run
Seems to be working for stage 1