private void addOrdered(List<Schema> ordered, Schema schema, List<Schema> moveOutwards) {
        ordered.add(schema);
        Schema eligibleMove;
        do {
            eligibleMove = removeFirstEntryWithFullyEmittedDependencies(moveOutwards, ordered);
            if (eligibleMove != null) {
                ordered.add(eligibleMove);
            }
        } while (eligibleMove != null);
    }
Reorders the given list of search definitions such that any supertype
always preceed any subtype. Subject to this condition the given order
is preserved (the minimal reordering is done).

@return a new list containing the same search instances in the right order
config-model/src/main/java/com/yahoo/schema/derived/SearchOrderer.java