Remove EventLogger from SparkListenerBus when SparkContext is stopped
Test suite refactored: replaced Future with CountDownLatch
Removed RDD.writeObject

RDD.writeObject was originally introduced to solve the problem that RDD dependencies can't serialized if related job hasn't been submitted (during the SparkListenerRDDCreation event handling process).  Now SparkListenerRDDCreation has been removed, RDDs will only be serialized after related jobs are submitted, thus their dependencies will be serialized properly.
Collect RDDs stage by stage when handling SparkListenerJobStart event

ShuffleDependency.rdd is transient, we can't recover the whole RDD DAG by tracking only the final RDD of the DAG.
Removed unnecessary imports