code: function deepSet(obj, deepKey, v) {
  	if (typeof obj !== 'object')
  		throw new Error(`deepSet failure. Not an object. type=${typeof obj}, key=${deepKey}`)
  	
  	if (typeof obj === null)
  		throw new Error(`deepSet failure. Setting into null object. key=${deepKey}`)
  
  	let parts = deepKey.split('.')
  	let t = obj
  
  	for (let i = 0; i < parts.length; i++) {
  		let k = parts[i]
  
  		if (i === parts.length - 1) {
  			t[k] = v
  			break
  		}
  
  		if (t[k] === undefined || t[k] === null) {
  			t[k] = {}
  		} else if (typeof t[k] !== 'object') {
  			throw new Error(`deepSet failure. Not an object. key=${deepKey}, part=${k}`)
  		}
  		t = t[k]
  	}
  	return obj
  }
docs: Deep set property into object.
  E.g. deepSet({}, 'a.b', 1) === {a:{b:1}}
  
  @param	{object}	obj        - Target object to set value into
  @param	{object}	deepKey    - Dot separated key names
  @param	{object}	v          - The value to be set
  @return	{object}	The passed-in obj