There's some cleanup to be done in `FeatureMigrationIT` and related classes.

- [x] Convert `static` `preMigrationHook` and `postMigrationHook` to use instance members, retrieved from the `internalCluster()`
- [x] Use Hamcrest matchers as described [in this comment](https://github.com/elastic/elasticsearch/pull/84192/files#r812224067) for better failure output
- [x] Rename `createSimpleSettings` to `createSettings`
- [x] Rename `createSimpleMapping` to `createMapping`
- [x] add support for unknown fields https://github.com/elastic/elasticsearch/pull/84258#pullrequestreview-890890422
server/src/main/java/org/elasticsearch/upgrades/SystemIndexMigrationTaskState.java
private static final ParseField CURRENT_INDEX_FIELD = new ParseField("current_index");
    private static final ParseField CURRENT_FEATURE_FIELD = new ParseField("current_feature");
    private static final ParseField FEATURE_METADATA_MAP_FIELD = new ParseField("feature_metadata");
    @SuppressWarnings(value = "unchecked")
    static final ConstructingObjectParser<SystemIndexMigrationTaskState, Void> PARSER = new ConstructingObjectParser<>(
        SYSTEM_INDEX_UPGRADE_TASK_NAME,
        true,
        args -> new SystemIndexMigrationTaskState((String) args[0], (String) args[1], (Map<String, Object>) args[2])
    );
    static {