Make StackContext more usable in libraries by reducing the need to
explicitly use IOLoop.add_callback or NullContext.
This change also simplifies and codifies the ordering behavior of
StackContext: When a wrapped callback is executed, the innermost
StackContexts are those that were active when the callback was
wrapped. Additional StackContexts (possibly including other copies
of the same contexts) may be present in outer levels of the stack, but
since the role of most StackContexts is to catch exceptions this should
not have any effect.
Backwards compatibility note: StackContexts that do something other than
catch exceptions may need to be modified to be reentrant.