[SPARK-3421][SQL] Allows arbitrary character in StructField.name

`StructField.toString` now quotes the `name` field and escapes backslashes and double quotes within the string. The `DataType` parser is also updated to parse double quoted string as `StructField` name.
This is kind of a Nit, but I think I'd prefer tests that just roundtrip StructFields that have various weird characters instead of those that are dependent on the exact output.  That would test for the desired behavior but would not have to be rewritten if we ever change the format. (I mostly say this because I just spent the last hour rewriting brittle parquet tests :) )