### 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/threadpool/ThreadPoolStatsTests.java
public void testThreadPoolStatsSort() {
        var stats = List.of(
            new ThreadPoolStats.Stats("z", -1, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("m", 3, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("m", 1, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("d", -1, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("m", 2, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("t", -1, 0, 0, 0, 0, 0L),
            new ThreadPoolStats.Stats("a", -1, 0, 0, 0, 0, 0L)
        );
        var copy = new ArrayList<>(stats);
        Collections.sort(copy);
        var names = copy.stream().map(ThreadPoolStats.Stats::name).toList();
        assertThat(names, contains("a", "d", "m", "m", "m", "t", "z"));
        var threads = copy.stream().map(ThreadPoolStats.Stats::threads).toList();
        assertThat(threads, contains(-1, -1, 1, 2, 3, -1, -1));
    }