`SnapshotsInProgress` can be pretty large and today it's an `AbstractNamedDiffable` so any changes to any snapshot status result in sending the whole thing over the wire to all nodes. Yet, it undergoes a lot of small changes as snapshots proceed towards completion. We should make it properly diffable so that small changes have smaller representations on the wire and unchanged parts can be shared between instances.

Relates #77466.
server/src/main/java/org/elasticsearch/cluster/SnapshotsInProgress.java
return includeGlobalState;
        }
        public Map<String, Object> userMetadata() {
            return userMetadata;
        }
        public boolean partial() {
            return partial;
        }
        public long startTime() {
            return startTime;
        }
        public List<String> dataStreams() {
            return dataStreams;
        }
        public List<SnapshotFeatureInfo> featureStates() {
            return featureStates;
        }
        @Override
        public long repositoryStateId() {
            return repositoryStateId;
        }
        public String failure() {
            return failure;
        }
        /**
         * What version of metadata to use for the snapshot in the repository
         */
        public Version version() {
            return version;
        }