### Description

From the nodes stats API, we should extract the `thread_pool` stats into their own endpoint. This endpoint can then be non-node-centric, and present a global view of the number of completed, rejected, and failed operations for each of the threadpools in the system.
server/src/test/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStatsTests.java
final SegmentsStats segmentsStats = new SegmentsStats();
        segmentsStats.add(++iota);
        segmentsStats.addIndexWriterMemoryInBytes(++iota);
        segmentsStats.addVersionMapMemoryInBytes(++iota);
        segmentsStats.addBitsetMemoryInBytes(++iota);
        indicesCommonStats.getSegments().add(segmentsStats);
        indicesCommonStats.getGet().add(new GetStats(++iota, ++iota, ++iota, ++iota, ++iota));
        MergeStats mergeStats = new MergeStats();
        mergeStats.add(++iota, ++iota, ++iota, ++iota, ++iota, ++iota, ++iota, ++iota, ++iota, 1.0 * ++iota);
        indicesCommonStats.getMerge().add(mergeStats);
        indicesCommonStats.getRefresh().add(new RefreshStats(++iota, ++iota, ++iota, ++iota, ++iota));
        indicesCommonStats.getFlush().add(new FlushStats(++iota, ++iota, ++iota));
        indicesCommonStats.getWarmer().add(new WarmerStats(++iota, ++iota, ++iota));
        indicesCommonStats.getCompletion().add(new CompletionStats(++iota, null));
        indicesCommonStats.getTranslog().add(new TranslogStats(++iota, ++iota, ++iota, ++iota, ++iota));
        RecoveryStats recoveryStats = new RecoveryStats();
        recoveryStats.incCurrentAsSource();
        recoveryStats.incCurrentAsTarget();
        recoveryStats.addThrottleTime(++iota);
        indicesCommonStats.getRecoveryStats().add(recoveryStats);
        indicesCommonStats.getBulk().add(new BulkStats(++iota, ++iota, ++iota, ++iota, ++iota));
        indicesCommonStats.getShards().add(new ShardCountStats(++iota));
        return indicesCommonStats;
    }
    private static ShardStats createShardStats(ShardId shardId) {
        ShardRouting shardRouting = ShardRouting.newUnassigned(
            shardId,
            true,
            RecoverySource.EmptyStoreRecoverySource.INSTANCE,
            new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, "message"),