code: def recurse( record, index, stop_types=STOP_TYPES,already_seen=None, type_group=False ):
      
      if already_seen is None:
          already_seen = set()
      if record['address'] not in already_seen:
          already_seen.add(record['address'])
          if 'refs' in record:
              for child in children( record, index, stop_types=stop_types ):
                  if child['address'] not in already_seen:
                      for descendant in recurse( 
                          child, index, stop_types, 
                          already_seen=already_seen, type_group=type_group,
                      ):
                          yield descendant
          yield record
docs: Depth first traversal of a tree, all children are yielded before parent
      
      record -- dictionary record to be recursed upon 
      index -- mapping 'address' ids to dictionary records 
      stop_types -- types which will *not* recurse 
      already_seen -- set storing already-visited nodes 
      
      yields the traversed nodes