'Recursively lists bunch of directories.
Args:
urns: List of urns to list children.
token: Security token.
limit: Max number of children to list (NOTE: this is per urn).
age: The age of the items to retrieve. Should be one of ALL_TIMES,
NEWEST_TIME or a range.
Yields:
(subject<->children urns) tuples. RecursiveMultiListChildren will fetch
children lists for initial set of urns and then will fetch children\'s
children, etc.
For example, for the following objects structure:
a->
b -> c
-> d
RecursiveMultiListChildren([\'a\']) will return:
[(\'a\', [\'b\']), (\'b\', [\'c\', \'d\'])]'

def RecursiveMultiListChildren(self, urns, token=None, limit=None, age=NEWEST_TIME):

    checked_urns = set()
    urns_to_check = urns
    while True:
        found_children = []
        for (subject, values) in self.MultiListChildren(urns_to_check, token=token, limit=limit, age=age):
            found_children.extend(values)
            (yield (subject, values))
        checked_urns.update(urns_to_check)
        urns_to_check = (set(found_children) - checked_urns)
        if (not urns_to_check):
            break
