### Description

`SearchResponse.Clusters` currently uses a `HashMap<String, AtomicReference>` for storing Cluster objects. The AtomicReference CAS swaps are done in a do/while loop in most cases (e.g., in `CCSSingleCoordinatorSearchProgressListener`).

This can be replaced with a `ConcurrentHashMap` in conjunction with either `compute()` method or the `replace(key, assumed_previous_value, value)` method for atomically swapping in a new Cluster object with a CAS operation, assuring that the updates don't lose data from competing threads doing separate Cluster object updates.

See: https://github.com/elastic/elasticsearch/pull/98457/files#r1310467586 
server/src/main/java/org/elasticsearch/action/search/CCSSingleCoordinatorSearchProgressListener.java
status = SearchResponse.Cluster.Status.PARTIAL;
                    took = new TimeValue(timeProvider.buildTookInMillis());
                }
                SearchResponse.Cluster updated = new SearchResponse.Cluster.Builder(curr).setStatus(status)
                    .setSuccessfulShards(successfulShards)
                    .setTook(took)
                    .build();
                swapped = clusterRef.compareAndSet(curr, updated);
            } while (swapped == false);
        }
    }
    /**
     * Executed once when the final reduce is created.
     *
     * Note that his will see all the shards, even if they have been passed to the onPartialReduce
     * method already.
     *
     * @param shards The list of shards that are part of this reduce.
     * @param totalHits The total number of hits in this reduce.
     * @param aggs The final result for aggregations.
     * @param reducePhase The version number for this reduce.
     */
    @Override
    public void onFinalReduce(List<SearchShard> shards, TotalHits totalHits, InternalAggregations aggs, int reducePhase) {
        if (clusters.hasClusterObjects() == false) {
            return;
        }
        Map<String, Integer> totalByClusterAlias = partitionCountsByClusterAlias(shards);
        for (Map.Entry<String, Integer> entry : totalByClusterAlias.entrySet()) {
            String clusterAlias = entry.getKey();