static <I extends SmithyIntegration<?, ?, ?>> List<I> sort(Iterable<I> integrations) {
        return new IntegrationTopologicalSort<>(integrations).sort();
    }
Topologically sorts a list of integrations based on priority,
runBefore, and runAfter, and integration names.

@param integrations Integrations to sort.
@param <I> The type of integration to sort.
@return Returns the sorted integrations.
@throws IllegalArgumentException If a cycle is found between integrations.
@throws IllegalArgumentException If multiple integrations share the same name.
smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/SmithyIntegration.java