[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
This `case` branch can be simplified to:

```scala
case map: Map[String, _] =>
  JObject(map.mapValues(toJsonValue).toList)
```