boolean stepsAreDifferent(List<StepModel> firstSteps, List<StepModel> secondSteps) {
        if (firstSteps.size() != secondSteps.size()) {
            return true;
        }

        for (int stepCounter = 0; stepCounter < firstSteps.size(); stepCounter++) {
            StepModel firstStep = firstSteps.get(stepCounter);
            StepModel secondStep = secondSteps.get(stepCounter);

            if (firstStep.getWords().size() != secondStep.getWords().size()) {
                return true;
            }

            if (attachmentsAreStructurallyDifferent(firstStep.getAttachments(), secondStep.getAttachments())) {
                return true;
            }

            if (wordsAreDifferent(firstStep, secondStep)) {
                return true;
            }

            if (stepsAreDifferent(firstStep.getNestedSteps(), secondStep.getNestedSteps())) {
                return true;
            }
        }
        return false;
    }
A scenario model is structural identical if all cases have exactly the same
steps, except for values of step arguments.
<p>
This is implemented by comparing all cases with the first one
jgiven-core/src/main/java/com/tngtech/jgiven/report/analysis/CaseArgumentAnalyser.java