Patch Spark to better handling executor loss due to OOM

Solve the issue describe in: https://app.asana.com/0/5660773543914/11737272694644
1. Limit max number of executor losses on each host (spark.executor.maxLost.perHost), so after some failed retries, an exception will be sent to client

2. If there is a OOM, abort the task immediately and throw an exception to client.