Fix classloader bug with custom job return types

There is a difficult bug with jobs that return case classes and other custom classes.  When the job finishes, you will see a stack trace like this:

```
org.apache.spark.SparkException: Job aborted: Exception while deserializing and fetching task: com.esotericsoftware.kryo.KryoException: Unable to find class: ooyala.cnd.MyOwnDataType
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$abortStage$1.apply(DAGScheduler.scala:1028)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$abortStage$1.apply(DAGScheduler.scala:1026)
	at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
	at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$abortStage(DAGScheduler.scala:1026)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$processEvent$10.apply(DAGScheduler.scala:619)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$processEvent$10.apply(DAGScheduler.scala:619)
	at scala.Option.foreach(Option.scala:236)
	at org.apache.spark.scheduler.DAGScheduler.processEvent(DAGScheduler.scala:619)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$start$1$$anon$2$$anonfun$receive$1.applyOrElse(DAGScheduler.scala:207)
	at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
	at akka.actor.ActorCell.invoke(ActorCell.scala:456)
	at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
	at akka.dispatch.Mailbox.run(Mailbox.scala:219)
```

This happens because the deserializer threads in TaskResultGetter.scala does not have access to the class loader that loads the job jars.

This fix does several things:
- Creates a new trait, `SparkContextFactory`, responsible for creating SparkContexts
- Uses our custom job jar classloader to create a SparkContext using a configurable `SparkContextFactory`, thus ensuring that future loads will happen with our own classloader
- Adds a unit test for jobs that return results using their own types
- Also fixes `dependent-jar-uris` context config, which lets you upload a secondary jar that applies at a context level.  This can be used for splitting out the majority of your dependencies into a jar such that the main job jar remains small and easy to deploy.