Put a parsed URL back together again. This may result in a
slightly different, but equivalent URL, if the URL that was parsed
originally had redundant delimiters, e.g. a ? with an empty query
(the draft states that these are equivalent) and keep_empty is false
or components is the result of the urlparse() call with
missing_as_none=False.