FromStr for PathLeaf<String> splits key.path=value, parses the LHS
as a RefPath, and stores the RHS as-is. The serde_json::Value impl
parses that RHS as JSON, falling back to a string:
port=8080 is a number, name=foo is a string.
The grammar accepts bracket steps — a[0]=1 parses — because it is the
one spelling references also use. Whether such a path may write is
RefPath::try_into_keys’ question, asked at conversion time.
Display of a typed leaf is canonical — path, =, compact JSON of the
leaf — so name=foo displays as name="foo". FromStr ∘ Display
preserves path and leaf, not the original spelling. PathLeaf<String>
displays the raw RHS.
Expands to a nested object. Fallible because the grammar accepts
bracket steps (a[0]=1 parses) that a writer cannot use: an index
never reaches the nested-object expansion.