Could.  Not sure I want to.  At various points in the evolution of this work, the stage removal code was all inline within ``jobIdToStageIdsRemove``, a helper function defined within the scope of that function, and now broken out as a separate function.  I don't know whether ``removeStage`` will ever be useful except as part of ``jobIdToStageIdsRemove`` and ``handleJobCancellation``, or whether ``forIndependentStagesOfRemovedJob`` will ever make sense without stage removal being part of it; but even if there are never any additional use cases, I kind of like the way things now resolve into two basic operations: ``removeStage`` to clean up the DAGScheduler, and ``cancelTasks`` to clean up the TaskScheduler.  That way the core of ``handleJobCancellation`` is clean and obvious:
```scala
forIndependentStagesOfRemovedJob(jobId) { stageId =>
  taskSched.cancelTasks(stageId)
  removeStage(stageId)
}
```