Added postSparkListenerEvent method in SparkContext

So that components other than DAGScheduler can also post SparkListenerEvents objects.
Added SparkListenerRDDCreation event

This event should be posted every time an RDD object is created.
Added code to post the SparkListenerRDDCreation event when an RDD is created
Added onRDDCreation callback to SparkListener
Added EventLoggingSuite and the RDD creation test case
Added EventLogger, a SparkListener that logs SparkListenerEvents to a specified log file
Hooked EventLogger onto SparkListenerBus
EventLogger should be closed when the owner SparkContext is closed
Added test case for event persistence
Added EventLogInputStream & EventLogOutputStream to handle RDD serialization
Refactored test suite
Made EventLogInputStream & EventLogOutputStream class classes
Added a feature incomplete EventReplayer
Minor reformatting
Try our best to let the replayer see the most recent events
Bug fix: InputStream.available() not working as expected, this fix is a workaround, should investigate later
Added new test case for EventReplayer
Call `RDD.depencencies` when serializing RDD objects to serialize ensure their dependencies are also serialized
Added SparkContext.removeSparkListener
Added test case to ensure RDDs are properly restored from event log