Added metrics to JobLogger, and made JobLogger configurable.

This commit adds GC and deserialization to the data
output by the job logger.  It also adds metrics about
how much shuffle data was fetched locally and how much time
the local fetch took. Finally, it makes the job logger
configurable, so it can be enabled (but is disabled by
default) with configuration parameters.
Added input size and read time.

This commit adds a new metric in TaskMetrics to record
the input size and read time when data is read from the BlockManager,
from HDFS, or from a parallelized collection, and displays this
information in the UI.
Made JobLogger more robust by improving log output.

Send exceptions to logError() rather than printing
a stack trace, and fail gracefully if JobLogger doesn't
start up correctly.