code: 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
docs: 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