code: public function set($key, $value)
  	{
  		if (!is_string($key))
  			throw new InvalidArgumentException('First parameter has to be a string');
  
  		if (!$this->isTypeSupported(gettype($value)))
  			throw new UnsupportedException('First parameter has to be an int, a double, a bool or a string');
  
  		try
  		{
  			// try to find the key, and set the value if this succeeds
  			$this->getRecursive($key, $this->data);
  			$this->data = $this->setRecursive($key, $value);
  		}
  		catch (ElementNotFoundException $e)
  		{
  			$this->data = array_merge_recursive($this->data, $this->setRecursive($key, $value));
  		}
  	}
docs: Sets the value, not regarding whether the key does exist yet or it does not
  
  @param $key string
  @param $value mixed
  @throws InvalidArgumentException
  @throws UnsupportedException
  @return void