List<Move> makeRoomFor(Node node, Node host, List<Node> hosts, List<Move> movesConsidered, List<Move> movesMade) {
            SolutionKey solutionKey = new SolutionKey(node, host, movesConsidered, movesMade);
            List<Move> solution = solutions.get(solutionKey);
            if (solution == null) {
                solution = findRoomFor(node, host, hosts, movesConsidered, movesMade);
                solutions.put(solutionKey, solution);
            }
            return solution;
        }
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