### Description

Implement health indicator for shard allocation.
This indicator should have same or similar behavior to existing health endpoint.

Aspects to be considered:
* nodes scheduled for reboot should not cause cluster to go yellow (but could cause it go red)
* huge number of unallocated shards should not cause response bloat.
* consider showing allocation explain if possible

Rel: TBD
server/src/main/java/org/elasticsearch/node/Node.java
private HealthService createHealthService(ClusterService clusterService) {
        var serverHealthIndicatorServices = List.of(
            new InstanceHasMasterHealthIndicatorService(clusterService),
            new RepositoryIntegrityHealthIndicatorService(clusterService)
        );
        var pluginHealthIndicatorServices = pluginsService.filterPlugins(HealthPlugin.class)
            .stream()
            .flatMap(plugin -> plugin.getHealthIndicatorServices().stream())
            .toList();
        return new HealthService(concatLists(serverHealthIndicatorServices, pluginHealthIndicatorServices));
    }
    private RecoveryPlannerService getRecoveryPlannerService(
        ThreadPool threadPool,
        ClusterService clusterService,
        RepositoriesService repositoryService
    ) {
        final List<RecoveryPlannerPlugin> recoveryPlannerPlugins = pluginsService.filterPlugins(RecoveryPlannerPlugin.class);
        if (recoveryPlannerPlugins.isEmpty()) {
            return new SourceOnlyRecoveryPlannerService();
        }
        if (recoveryPlannerPlugins.size() > 1) {
            throw new IllegalStateException("A single RecoveryPlannerPlugin was expected but got: " + recoveryPlannerPlugins);
        }
        final ShardSnapshotsService shardSnapshotsService = new ShardSnapshotsService(
            client,
            repositoryService,
            threadPool,
            clusterService
        );
        return recoveryPlannerPlugins.get(0).createRecoveryPlannerService(shardSnapshotsService);