def insert(index, key, value)
      tmp = IIIF::OrderedHash.new
      index = self.length + 1 + index if index < 0
      if index < 0
        m = "Index #{index} is too small for current length (#{length})"
        raise IndexError, m
      end
      if index > 0
        i=0
        self.each do |k,v|
          tmp[k] = v
          self.delete(k)
          i+=1
          break if i == index
        end
      end
      tmp[key] = value
      tmp.merge!(self) # copy the remaining to tmp
      self.clear       # start over...
      self.merge!(tmp) # now put them all back
      self
    end
def insert(index, key, value)
      tmp = IIIF::OrderedHash.new
      index = self.length + 1 + index if index < 0
      if index < 0
        m = "Index #{index} is too small for current length (#{length})"
        raise IndexError, m
      end
      if index > 0
        i=0
        self.each do |k,v|
          tmp[k] = v
          self.delete(k)
          i+=1
          break if i == index
        end
      end
      tmp[key] = value
      tmp.merge!(self) # copy the remaining to tmp
      self.clear       # start over...
      self.merge!(tmp) # now put them all back
      self
    end
Insert a new key and value at the suppplied index.

 Note that this is slightly different from Array#insert in that new
 entries must be added one at a time, i.e. insert(n, k, v, k, v...) is
 not supported.

 @param [Integer] index
 @param [Object] key
 @param [Object] value