Split the argument string. Example:
	
	--arg name:value0,value1,key2=value2,key3=value3
	
	gets split into
	
	name, args, kwargs = (
	    "name",
	    (value0, value1),
	    {"key2":value2, "key3":value3},
	)

def _parseSpec(values):
	"""
	Split the argument string. Example:
	
	--arg name:value0,value1,key2=value2,key3=value3
	
	gets split into
	
	name, args, kwargs = (
	    "name",
	    (value0, value1),
	    {"key2":value2, "key3":value3},
	)
	"""
	split  = values.split(":", 1)
	name   = split[0].strip()
	rest   = split[1] if len(split) == 2 else ""
	args   = []
	kwargs = {}
	
	def carveRest(s, sep):
		quotepairs = {"'": "'", "\"": "\"", "{":"}", "[":"]", "(":")"}
		val   = ""
		quote = ""
		prevC = ""
		for i, c in enumerate(s):
			if quote:
				if   c == quote[-1]  and prevC != "\\":
					val    += c
					prevC   = ""
					quote   = quote[:-1]
				elif c in quotepairs and prevC != "\\":
					val    += c
					prevC   = ""
					quote  += quotepairs[c]
				elif prevC == "\\":
					val     = val[:-1]+c
					prevC   = ""
				else:
					val    += c
					prevC   = c
			else:
				if   c == sep:
					break
				elif c in quotepairs and prevC != "\\":
					val    += c
					prevC   = ""
					quote  += quotepairs[c]
				elif prevC == "\\":
					val     = val[:-1]+c
					prevC   = ""
				else:
					val    += c
					prevC   = c
			
		return val, s[i+1:]
	
	while rest:
		positionalVal, positionalRest = carveRest(rest, ",")
		keywordKey,    keywordRest    = carveRest(rest, "=")
		
		#
		# If the distance to the first "=" (or end-of-string) is STRICTLY
		# shorter than the distance to the first ",", we have found a
		# keyword argument.
		#
		
		if len(keywordKey)<len(positionalVal):
			key       = re.sub("\\s+", "", keywordKey)
			val, rest = carveRest(keywordRest, ",")
			try:    kwargs[key] = ast.literal_eval(val)
			except: kwargs[key] = val
		else:
			if len(kwargs) > 0:
				raise ValueError("Positional argument "+repr(r)+" found after first keyword argument!")
			val, rest = positionalVal, positionalRest
			try:    args += [ast.literal_eval(val)]
			except: args += [val]
	
	return name, args, kwargs