'Return a set of all nodes downstream from `start_node`.
Parameters
start_node : :class:`.SchemeNode`'

def downstream_nodes(self, start_node):

    visited = set()
    queue = deque([start_node])
    while queue:
        node = queue.popleft()
        snodes = [link.sink_node for link in self.output_links(node)]
        for source_node in snodes:
            if (source_node not in visited):
                queue.append(source_node)
        visited.add(node)
    visited.remove(start_node)
    return visited
