Clean

		Makes sure both the key and value are properly stored in their correct
		representation

		Arguments:
			value {mixed} -- The value to clean

		Raises:
			ValueError

		Returns:
			mixed

def clean(self, value):
		"""Clean

		Makes sure both the key and value are properly stored in their correct
		representation

		Arguments:
			value {mixed} -- The value to clean

		Raises:
			ValueError

		Returns:
			mixed
		"""

		# If the value is None and it's optional, return as is
		if value is None and self._optional:
			return None

		# If the value is not a dict
		if not isinstance(value, dict):
			raise ValueError('value')

		# Recurse and return it
		return {str(self._key.clean(k)):self._node.clean(v) for k,v in iteritems(value)}