Custom alternative to urllib.urlencode that keeps URL length
		down by not escaping certain special characters that Factual
		can tolerate unescaped. This is especially useful for the 
		JSON special chars {}[],:. 

		The full list of usually-escaped-but-ok-for-factual characters is:

		    / { } ' $ : , [ ]

		The API used to tolerate doublequotes, but this seems to have 
		changed. 

		suppress_null removes parametrs which are set to None.

def join_params(self, params, suppress_null=True):
		''' 
		Custom alternative to urllib.urlencode that keeps URL length
		down by not escaping certain special characters that Factual
		can tolerate unescaped. This is especially useful for the 
		JSON special chars {}[],:. 

		The full list of usually-escaped-but-ok-for-factual characters is:

		    / { } ' $ : , [ ]

		The API used to tolerate doublequotes, but this seems to have 
		changed. 

		suppress_null removes parametrs which are set to None.
		'''
		# ensure all params and values are properly urlencoded
		# since we may have numbers, etc. here, cast to unicode and encode back to utf-8
		return "&".join([
					("%s=%s" \
						% (
							urllib.quote_plus(unicode(k).encode('utf-8'), '/{}\'$:,[]'),
							urllib.quote_plus(unicode(v).encode('utf-8'), '/{}\'$:,[]')
						)
					) 
					for k,v 
					in params.iteritems()
					if not suppress_null or v != None
				])