### Elasticsearch Version

8.2.0 (likely others)

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

Cloud

### Problem Description

I saw a NPE in `MlAssignmentNotifier#auditMlTasks` which looks to be due to the `PersistentTasksCustomMetadata` being completely missing (i.e. `null`) rather than simply empty.

### Steps to Reproduce

Unknown

### Logs (if relevant)

```
[instance-0000000000] uncaught exception in thread [elasticsearch[instance-0000000000][generic][T#5]]
java.lang.NullPointerException: Cannot invoke "org.elasticsearch.persistent.PersistentTasksCustomMetadata.tasks()" because "currentTasks" is null
	at org.elasticsearch.xpack.ml.MlAssignmentNotifier.auditMlTasks(MlAssignmentNotifier.java:96) ~[?:?]
	at org.elasticsearch.xpack.ml.MlAssignmentNotifier.auditChangesToMlTasks(MlAssignmentNotifier.java:76) ~[?:?]
	at org.elasticsearch.xpack.ml.MlAssignmentNotifier.lambda$clusterChanged$0(MlAssignmentNotifier.java:64) ~[?:?]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:714) ~[elasticsearch-8.2.0.jar:8.2.0]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]
```
x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MlAssignmentNotifier.java
private static final Logger logger = LogManager.getLogger(MlAssignmentNotifier.class);
    private final AnomalyDetectionAuditor anomalyDetectionAuditor;
    private final DataFrameAnalyticsAuditor dataFrameAnalyticsAuditor;
    private final ThreadPool threadPool;
    MlAssignmentNotifier(
        AnomalyDetectionAuditor anomalyDetectionAuditor,
        DataFrameAnalyticsAuditor dataFrameAnalyticsAuditor,
        ThreadPool threadPool,
        ClusterService clusterService
    ) {
        this.anomalyDetectionAuditor = anomalyDetectionAuditor;
        this.dataFrameAnalyticsAuditor = dataFrameAnalyticsAuditor;
        this.threadPool = threadPool;
        clusterService.addListener(this);
    }
    private String executorName() {
        return ThreadPool.Names.GENERIC;
    }
    @Override