code: @Override
      public final <T> AbstractConfig put(final IKey<T> key, final T value) {
          if (!key.isDefaultValue(value)) {
              config.put(key.key(), value);
          } else {
              remove(key);
          }
          return this;
      }
docs: puts a new config to the configuration map. If given value is default
  value of key then it will be removed. This is necessary to keep the ui
  code small and clean. Also the given value type will be asserted by
  {@link IKey} implementation.
  
  @param key   mandatory parameter
  @param value mandatory parameter