HandlerNotes


1. Changed HandlerData to not include arg buffer.

    t_handler field changed to t_handlerData.
    XR_InitHandler --> XR_InitHandlerData
    hd_handlee --> hd_next
    
    XR_CallHandler args changed
    
    change args to XR_InvokeHandler


Switch:
    if( (code = setjmp()) == 0 ) { dispose of current; dispatch new }
    finishSwitch(code)

CallHandler:
    t = allocate a thread
    store data on its stack
    CallHandlerInner(t, t_sp)

CallHandlerInner(t, t_sp)
    assume t is allocated, has any args stored on stack
    at higher addresses than (i.e. below) t_sp.
    
    if( setjmp(&(t->t_handlerData.hd_resume)) == 0 )
        { InvokeHandler(t, t_sp, ... ) }

    It's the responsibility of InvokeHandler to swap the stacks,
    run the handler, and unswap the stacks if it returns.
