Throw exception for non-set args for union, enhance a few return values

+ Add precondition for union that all args are sets, even when the
  number of args is 3 or more.

+ Add details to doc strings about the metadata and 'sortedness' of
  return values.  Add tests to check that these details are true.

+ Slightly modify functions project, rename, index, and join so the
  sortedness of their return value (or parts of their return value for
  index and join) will be the same as the sortedness of set provided
  as an argument.

+ Added at least some simple unit tests for all functions.  Most of
  these were copied from Clojure's tests for the clojure.set
  namespace, and then enhanced to be repeated for each of several
  types of sets and maps.