[SPARK-4079] Default to LZF if Snappy not available

By default, snappy is the compression codec used.
If Snappy is not available, Spark currently throws
a stack trace. Now Spark falls back to LZF
if Snappy is not available on the cluster and logs
a warning message.

The only exception is if the user has explicitly
set spark.io.compression.codec=snappy. In this
case, if snappy is not available, an
IllegalArgumentException is thrown.
Given my other comment, here's a bit of Scala-fu for your entertainment:

    conf.getOption(option)
      .map { createCodec(conf, _) }
      .orElse(createCodec(conf, DEFAULT_COMPRESSION_CODEC))
      .orElse(createCodec(conf, FALLBACK_COMPRESSION_CODEC))
      .getOrElse(throw new IllegalArgumentException("Oops."))