'Get the set of I{all} property names.
@param history: A history of nodes checked to prevent
circular hunting.
@type history: [L{Properties},..]
@return: A set of property names.
@rtype: list'

def keys(self, history=None):

    if (history is None):
        history = []
    history.append(self)
    keys = set()
    keys.update(self.definitions.keys())
    for x in self.links:
        if (x in history):
            continue
        keys.update(x.keys(history))
    history.remove(self)
    return keys
