Add SparkContext.runAsync and use it to re-implement AsyncRDDActions.