Iterates over an iterable containing either type objects or tuples of
    type objects and yields once for every type object found.

def itertypes(iterable):
    """Iterates over an iterable containing either type objects or tuples of
    type objects and yields once for every type object found."""
    seen = set()
    for entry in iterable:
        if isinstance(entry, tuple):
            for type_ in entry:
                if type_ not in seen:
                    seen.add(type_)
                    yield type_
        else:
            if entry not in seen:
                seen.add(entry)
                yield entry