def parent_name_at_rank(rank)
      return self.name if self.rank == rank
      p = @parent
      i = 0
      while !p.nil?
        return p.name if p.rank == rank
        p = p.parent
        i+= 1
        raise NameError, "Loop detected among parents for [#{self.display_name}]." if i > 75 
      end
      nil 
    end
def parent_name_at_rank(rank)
      return self.name if self.rank == rank
      p = @parent
      i = 0
      while !p.nil?
        return p.name if p.rank == rank
        p = p.parent
        i+= 1
        raise NameError, "Loop detected among parents for [#{self.display_name}]." if i > 75 
      end
      nil 
    end
Return the name of a parent at a given rank.
 TODO: move method to Base?