def +(other)
      unless root? && other.root?
        raise StructureException, 'Only roots can be added'
      end

      a = frozen? ? dup : self
      b = other.frozen? ? other.dup : other

      ab = self.class.new
      ab << a << b
    end
def +(other)
      unless root? && other.root?
        raise StructureException, 'Only roots can be added'
      end

      a = frozen? ? dup : self
      b = other.frozen? ? other.dup : other

      ab = self.class.new
      ab << a << b
    end
Add two roots together to create a larger tree. A new common root will be
 created and returned. Note that if the any of the root nodes are not
 frozen they will be modified, and as a result seize to be roots.

 @param  other [Node] a Node-like object that responds true to #root?
 @return [Node] a new root with the two nodes as children.