message: core: expose an accessor for the `FieldSet` on `Attributes`
  ## Motivation
  Exposing an accessor for the `FieldSet` on `Attributes` can motivate the
  subscriber to achieve some performance improvement, such as
  `OpenTelemetrySubscriber`
  ## Alternative
  Make `ValueSet::field_set()` be `pub` instead of `pub(crate)`.
diff: //! Spans represent periods of time in the execution of a program.
  +use core::num::NonZeroU64;
  +
  +use crate::field::FieldSet;
  use crate::parent::Parent;
  use crate::{field, Metadata};
  -use core::num::NonZeroU64;
  /// Identifies a span within the context of a collector.
  ///
  @@ -195,6 +197,21 @@ impl<'a> Attributes<'a> {
  pub fn is_empty(&self) -> bool {
  self.values.is_empty()
  }
  +
  + /// Returns the set of all [fields] defined by this span's [`Metadata`].
  + ///
  + /// Note that the [`FieldSet`] returned by this method includes *all* the
  + /// fields declared by this span, not just those with values that are recorded
  + /// as part of this set of `Attributes`. Other fields with values not present in
  + /// this `Attributes`' value set may [record] values later.
  + ///
  + /// [fields]: crate::field
  + /// [record]: Attributes::record()
  + /// [`Metadata`]: crate::metadata::Metadata
  + /// [`FieldSet`]: crate::field::FieldSet
  + pub fn fields(&self) -> &FieldSet {
  + self.values.field_set()
  + }
  }
  // ===== impl Record =====
  