Uploads specified zip package to cloud endpoint.

		See URL below for description on how to properly create a package:
		https://t3n.zendesk.com/entries/20348448-Blueprints-Script-and-Software-Package-Management

		:param package: path to zip file containing package.manifest and supporting scripts
		:param ftp_url: ftp URL including credentials of the form ftp://user:password@hostname

def PackageUpload(package,ftp_url):
		"""Uploads specified zip package to cloud endpoint.

		See URL below for description on how to properly create a package:
		https://t3n.zendesk.com/entries/20348448-Blueprints-Script-and-Software-Package-Management

		:param package: path to zip file containing package.manifest and supporting scripts
		:param ftp_url: ftp URL including credentials of the form ftp://user:password@hostname
		"""
		#o = urlparse.urlparse(ftp_url)
		# Very weak URL checking
		#if o.scheme.lower() != "ftp":  
		#	clc.v1.output.Status('ERROR',2,'Invalid FTP URL')
		#	return

		# Confirm file exists 
		if not os.path.isfile(package):
			clc.v1.output.Status('ERROR',2,'Package file (%s) not found' % (package))
			return

		m = re.search("ftp://(?P<user>.+?):(?P<passwd>.+?)@(?P<host>.+)",ftp_url)
		try:
			ftp = ftplib.FTP(m.group('host'),m.group('user'),m.group('passwd'))
			file = open(package,'rb')   
			filename = re.sub(".*/","",package)
			ftp.storbinary("STOR %s" % (filename),file)
			file.close()
			ftp.quit()
			clc.v1.output.Status('SUCCESS',2,'Blueprint package %s Uploaded' % (filename))
		except Exception as e:
			clc.v1.output.Status('ERROR',2,'FTP error %s: %s' % (ftp_url,str(e)))

		return({})