[SPARK-3572] [sql] [mllib]  User-Defined Types and MLlib Datasets

This PR adds User-Defined Types (UDTs) to SQL.  It is a precursor to using SchemaRDD as a Dataset for the new MLlib API.  Currently, the UDT API is private since there is incomplete support (e.g., no Java or Python support yet).

## Main additions

Private SQL API
* Added annotation SQLUserDefinedType (DeveloperApi)
* Added abstract class UserDefinedType

ScalaReflection
* Methods for converting between Scala and Catalyst types now take DataType.
 * convertRowToScala added in several locations in SQL
* schemaFor checks for SQLUserDefinedType annotation

Unit Tests
* UserDefinedTypeSuite.scala: Tests fake version of DenseVector
* JavaUserDefinedTypeSuite.java: Tests fake version of DenseVector (defined in Scala)

## Design decisions

* UDTs override types natively recognized by SQL.
* Question: Should users be able to override primitive or built-in types?

## Items left for future PRs

* Java and Python APIs
* Serialization (Parquet, etc.)

CC: @mengxr @marmbrus