code: private List<SimplePath> runDepthFirstSearch(final Kam kam,
              final KamNode source,
              final Set<KamNode> targets) {
          final SetStack<KamNode> nodeStack = new SetStack<KamNode>();
          nodeStack.add(source);
  
          final SetStack<KamEdge> edgeStack = new SetStack<KamEdge>();
          final List<SimplePath> pathResults = new ArrayList<SimplePath>();
  
          int initialDepth = 0;
          runDepthFirstSearch(kam, source, source, targets, initialDepth,
                  nodeStack,
                  edgeStack, pathResults);
          return pathResults;
      }
docs: Initializes and executes the depth-first search from {@link KamNode}
  source to a {@link Set} of {@link KamNode} targets.
  
  @param kam {@link Kam}, the kam to traverse
  @param source {@link KamNode}, the source kam node
  @param targets {@link Set} of {@link KamNode}, the target kam nodes
  @return the resulting paths from this depth-first search