[SPARK-3569][SQL] Add metadata field to StructField

Add `metadata` to `StructField`, which is a map that can store information about the column. The metadata is preserved through simple operations like `SELECT`. This PR doesn't handle Ser/De of schema.

Questions:
1. Should we use a mutable map or immutable map for metadata?
2. I put the tests in `SQLQuerySuite`. Is it the right place?

@marmbrus @liancheng
Yes, for newer versions, data type information written in Parquet file is in JSON format only.