def headers!(hash)
      changing = headers.select { |header| hash.has_key?(header.key) }

      # modifies its elements!
      changing.each do |header|
        new_values = hash[header.key]
        header.raw = new_values[:raw] if new_values[:raw]
        header.key = new_values[:key] if new_values[:key]
      end

      Redhead::HeaderSet.new(changing)
    end
def headers!(hash)
      changing = headers.select { |header| hash.has_key?(header.key) }

      # modifies its elements!
      changing.each do |header|
        new_values = hash[header.key]
        header.raw = new_values[:raw] if new_values[:raw]
        header.key = new_values[:key] if new_values[:key]
      end

      Redhead::HeaderSet.new(changing)
    end
Returns true if self.headers == other.headers and self.string == other.string.
 Modifies the headers in the set, using the given _hash_, which has the form

     { some_header: { raw: a, key: b }, another_header: ..., ... }

 Change the header with key :some_header such that its new raw name is _a_ and its new key name
 is _b_. Returns a HeaderSet object containing the changed Header objects.