context: s/ucontext_t/basic_context/

Replace uses of ucontext_t with a basic_context object, except for the
cleanup code in scheduler.  This will make it easier to modify non-stack
contexts and gets rid of all the uc_link=NULLs that were recently added.
intrusive: add intrusive_stack_link + intrusive_queue_link, update users

This change adds intrusive_stack_link and intrusive_queue_link, which should
be added to intrusive classes and passed as the link parameter for each
container.

This is an improvement over requiring users to have special knowledge about
what type the link member-pointer should be and is idiomatically nice for
more complex data-structures.  It also means that we can assert that the
object has been removed from an intrusive structure in the link's destructor
instead of special-casing every link for every class.