Spark Integration: Collect System Metrics from Spark Job

Build running here: https://builds.cask.co/browse/CDAP-DUT176-5

@anew : Please review. Thanks. 
I remember we talked about having a static map in somewhere (either inside SparkProgramWrapper or a new singleton class, doesn't matter too much in this context) that maps from `RunId` to `BasicSparkContext`. I think for this reporter class, it's better to have the `BasicSparkContext` being passed in from the `Sink` rather than using a static reference directly.

By doing so, when we support multiple runs of spark jobs, we can write the runId to the Properties file (generated by SparkRuntimeService). When the Sink get instantiated, it reads the runId from the file and lookup the `BasicSparkContext` instance from the map (as described above) and pass it to this reporter class.