@Override
        public boolean equals(Object o) {
            if (o == this) return true;
            if (o == null || o.getClass() != this.getClass()) return false;

            SolutionKey other = (SolutionKey)o;
            if ( ! other.node.equals(this.node)) return false;
            if ( ! other.host.equals(this.host)) return false;
            if ( ! other.movesConsidered.equals(this.movesConsidered)) return false;
            if ( ! other.movesMade.equals(this.movesMade)) return false;
            return true;
        }
Finds the shortest sequence of moves which makes room for the given node on the given host,
assuming the given moves already made over the given hosts' current allocation.

@param node the node to make room for
@param host the target host to make room on
@param hosts the hosts onto which we can move nodes
@param movesConsidered the moves already being considered to add as part of this scenario
                       (after any moves made by this)
@param movesMade the moves already made in this scenario
@return the list of movesMade with the moves needed for this appended, in the order they should be performed,
        or null if no sequence could be found
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java