[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