[SPARK-4648][SQL] Support COALESCE function in Spark SQL and Hive QL

Support Coalesce function in Spark SQL.
Support type widening in Coalesce function.
And replace Coalesce UDF in Spark Hive with local Coalesce function since it is memory efficient and faster.
I think they are not conflict. UDF always has the particular type coercion rule for its arguments, and it's probably not the same with `UNION ALL`. That's why we created the rule `HiveTypeCoercion` for the built-in UDFs.

The `coalesce` seems only accept the type coercion among `numeric` and `String` for its arguments, and only accept the identical data type of arguments for the other data types. (I didn't verify this, but seems most likely), so it will be great if we can enumerate all of the data types in the test suite (Maybe that's easier in HiveQuerySuite).