[CORE] SPARK-2640: In "local[N]", free cores of the only executor should be touched by "spark.task.cpus" for every finish/start-up of tasks.

Make spark's "local[N]" better. 
In our company, we use "local[N]" in production. It works exellentlly. It's our best choice.