Give the optimiser a helping hand by making some coroutine_ref members const.
Rename the friend functions used to access coroutine state, and do some general clean up.
Change go() to use a more efficient, move-friendly implementation.
Eliminate a move/copy for handlers that have no special handler_type.
Use mutable lambdas with their own state variables.