### 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
jvmStats,
            threadPoolStats,
            fsInfo,
            transportStats,
            httpStats,
            allCircuitBreakerStats,
            scriptStats,
            discoveryStats,
            ingestStats,
            adaptiveSelectionStats,
            scriptCacheStats,
            indexingPressureStats
        );
    }
    private static TimeSeries randomTimeSeries() {
        if (randomBoolean()) {
            long total = randomLongBetween(0, 1024);
            long day = total >= 1 ? randomLongBetween(0, total) : 0;
            long fifteen = day >= 1 ? randomLongBetween(0, day) : 0;
            long five = fifteen >= 1 ? randomLongBetween(0, fifteen) : 0;
            return new TimeSeries(five, fifteen, day, day);
        } else {
            return new TimeSeries(randomLongBetween(0, 1024));
        }
    }
    private IngestStats.Stats getPipelineStats(List<IngestStats.PipelineStat> pipelineStats, String id) {
        return pipelineStats.stream().filter(p1 -> p1.pipelineId().equals(id)).findFirst().map(p2 -> p2.stats()).orElse(null);
    }
}