def inside_new_context(klass, *args)
      new_context = append_new_context(klass, *args)

      orig, self.current_context = current_context, new_context
      yield
      self.current_context = orig
    end
def inside_new_context(klass, *args)
      new_context = append_new_context(klass, *args)

      orig, self.current_context = current_context, new_context
      yield
      self.current_context = orig
    end
Stores a reference to the current context, creates a nested new one,
 yields to the given block and then restores the previous context.

 @param klass [Context::*Context] context class
 @param args arguments for the class initializer
 @yield block