SPARK-2686 Add Length and Strlen support to Spark SQL

Syntactic, parsing, and operational support have been added for LEN(GTH) and STRLEN functions.
Examples:
SQL:
import org.apache.spark.sql._
case class TestData(key: Int, value: String)
val sqlc = new SQLContext(sc)
import sqlc._
val testData: SchemaRDD = sqlc.sparkContext.parallelize(
(1 to 100).map(i => TestData(i, i.toString)))
testData.registerAsTable("testData")
sqlc.sql("select length(key) as key_len from testData order by key_len desc limit 5").collect
res12: Array[org.apache.spark.sql.Row] = Array([3], [2], [2], [2], [2])
HQL:
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
import hc._
hc.hql
hql("select length(grp) from simplex").collect
res14: Array[org.apache.spark.sql.Row] = Array([6], [6], [6], [6])
As far as codebase changes: they have been purposefully made similar to the ones made for for adding SUBSTR(ING) from July 17:
SQLParser, Optimizer, Expression, stringOperations, and HiveQL were the main classes changed. The testing suites affected are ConstantFolding and ExpressionEvaluation.

This is tricky because it could go either way.  In general I have been deciding based on the following criteria:
 - When the input will usually be something static, where an invalid value is likely a mistake in a query that breaks it for all input, then we throw an exception (for example invalid regexes).
 - When the input is data dependent and is probably something wrong with the data, return null (for example a divide by zero error, or a failed cast to a numeric type).