I thought about this but it was kind of annoying due to several places in the code that still modify the conf after creating it (most notably the ones that figure out which port they bound to). I don't think there's enough time to change all of those now, and a mutable conf is actually easier to use for users than a builder, so I'd rather keep it this way. We can fix them in the future and truly use the conf in an immutable way internally.

One slightly odd thing is that SparkContext.conf is public right now; I'll probably make that private[spark] and maybe add a getConf for users to get a clone of it.