join returns empty string for empty sequence (not nil) and supports non-string list items

all list items are converted to string using (format nil "~a" item)
implemented using clhs definition of reduce