@Override
        public Shape next() {
            if (queued == null) {
                throw new NoSuchElementException("No relationships in relationship iterator stack");
            }

            Shape shape = queued;
            queued = null;
            return shape;
        }
Lazily iterates over all of the unique shapes in the closure of
the given shape, including the given shape.

@param shape Shape to find the closure of.
@param predicate Predicate used to short-circuit relationship branches.
@return Returns an iterator of shapes connected to {@code shape}.
smithy-model/src/main/java/software/amazon/smithy/model/neighbor/Walker.java