[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
Do we want to use `Array` or `Seq` here?  I always find the variance semantics of using `Array` to be kind of confusing and so usually prefer `Seq` unless the space/performance is critical.