[System.Xml.Linq] xmlns prefixes are no longer generated in some cases.
- XNodeWrite.FillXmlns was adding a prefix to the attribute when no prefix was found (prefix==null)
- XNodeWrite.LookupPrefix now returns string.Empty prefix when the namespace is the same as the element.
A string.Empty prefix explicitly states that it has no prefix whereas null states that prefix was not defined.
When LookupPrefix returns null for a namespace it means that a prefix should be generated first for anything that uses the namespace.
That is what XmlSerializationWriter.GetQualifiedName does.
Fixes #24300