[SPARK-4654] Clean up DAGScheduler getMissingParentStages / stageDependsOn methods

DAGScheduler has getMissingParentStages() and stageDependsOn() methods which are suspiciously similar to getParentStages().

Both of these methods perform traversals of the RDD / Stage graph to inspect parent stages. We can remove both of these methods, though: the set of parent stages is known when a Stage instance is constructed and is stored in Stage.parents, so we can just check for missing stages by looking for unavailable stages in Stage.parents. Similarly, we can determine whether one stage depends on another by searching Stage.parents rather than performing a graph traversal from scratch.
It might look like this changes the behavior of this method, since `getParentStages` will create any parent stages that are missing.  However, I think that this call never ended up taking the "create a missing stage" branch because `stage`'s parent stages should have already been created before it was created, since `getParentStages(stage.rdd, jobId)` should have been called from the `newStage` method: https://github.com/JoshRosen/spark/blob/dagscheduler-missingparents-cleanup/core/src/main/scala/org/apache/spark/scheduler/DAGScheduler.scala#L247