JobLogger: ID -> Id
Move SparkListenerBus out of DAGScheduler + Clean up

This PR introduces new SparkListenerEvents that are generated outside of DAGSchduler.
Instead of going through multiple layers (SparkContext -> DAGScheduler -> SparkListenerBus)
to post the event, we post them directly to sc.listenerBus (SparkContext -> SparkListenerBus).
This commit also cleans up the initialization order of the UI and the schedulers in SparkContext,
as well as variable names in DAGScheduler.

Further, some tests create events with null TaskInfo, which causes NPE on certain UI listeners.
This is now fixed.
Address Patrick's comments

This mainly involves (1) making event logging configurable and (2) setting the log boundary
to be on the granularity of application rather than job. Other more minor changes include
variable name changes, and directly assigning TaskMetrics.updatedBlocks rather than appending
to it.