[SPARK-3658][SQL]Take thrift server as a daemon

https://issues.apache.org/jira/browse/SPARK-3658

And keep the `CLASS_NOT_FOUND_EXIT_STATUS` and exit message in `SparkSubmit.scala`.
Yeah you are right, but if we put `gatherSparkSubmitOpts` before `spark-submit` there comes a trouble that as `gatherSparkSubmitOpts` takes an argument `SUBMIT_USAGE_FUNCTION` which is different in those scripts who invoke `gatherSparkSubmitOpts`(now we have three: `start-thriftserver.sh`, `spark-sql` and `pyspark`).
Instead of passing different `SUBMIT_USAGE_FUNCTION` and sourcing `bin/utils.sh` inside of  `spark-daemon.sh`, maybe it's better to assign values to `SUBMISSION_OPTS` and `APPLICATION_OPTS` outside of it.
There exists another option that we would not passing `SUBMIT_USAGE_FUNCTION` to  `gatherSparkSubmitOpts` which leads to less user-friendliness.