def run(reporter)
      reporter.describe_context(self) unless @assertions.empty?
      if @context_error
        reporter.report("context preparation", [:context_error, @context_error])
      else
        local_run(reporter, situation_class.new)
        run_sub_contexts(reporter)
      end
      reporter
    end
Executes the setups, hookups, assertions, and teardowns and passes results on to a given
{Riot::Reporter Reporter}. Sub-contexts will also be executed and provided the given reporter. A new
{Riot::Situation Situation} will be created from the specified {#situation_class Situation class}.

@param [Riot::Reporter] reporter the reporter to report results to
@return [Riot::Reporter] the given reporter