[SPARK-3762] Make SparkEnv a global variable.

This commit removes the SparkEnv thread local variable, and instead
makes SparkEnv a single global variable (which is how SparkEnv has
always been used).  Ths significantly simplifies how SparkEnv needs to
be passed around for monotasks.

This is a cherry-picked version of Apache Spark commit
655032965fc7e2368dff9947fc024ac720ffd19c to simplify handling
of SparkEnv.

Author: Davies Liu <davies.liu@gmail.com>

Closes #2624 from davies/env and squashes the following commits:

a69f30c [Davies Liu] deprecate getThreadLocal
ba77ca4 [Davies Liu] remove getThreadLocal(), update docs
ee62bb7 [Davies Liu] cleanup ThreadLocal of SparnENV
4d0ea8b [Davies Liu] clear reference of SparkEnv after stop
Massive remainder

Conflicts:
	core/src/main/scala/org/apache/spark/scheduler/ShuffleMapTask.scala
	core/src/main/scala/org/apache/spark/storage/DiskMonotask.scala

Conflicts:
	core/src/main/scala/org/apache/spark/executor/Executor.scala
Goop --> context renaming fix.

(compiles)