code: @SuppressWarnings("unchecked")
      public KeyValues add(final String key, final String value) {
          Validate.notEmpty(key, "key cannot be empty");
          Validate.notNull(value, "value cannot be null, use an empty string instead");
          
          final KeyValues res = new KeyValues();
          res.values.putAll(this.values);
          res.values.put(key.toLowerCase(), value);
          
          return res;
      }
docs: Adds new key-value pair. Supports multi-values for one key (if there has already been added
  some value with this key, additional value is added instead of rewriting). Please note this method
  creates new instance containing all existing values plus the new one rather than modifying this instance.
  @param key key (cannot be empty)
  @param value value (cannot be {@code null}, however can be empty for valueless headers)
  @return an exact copy of this instance containing all existing values plus the new one