NAME:
  fulljoin
 PURPOSE: 
  Create the full join, or Cartesian  product of two sets.
 DESCRIPTION:
 a and b are two vectors of identical type.
 a matrix c is returned where c[0,*] is values of a in order
                              c[1,*] is values of b in order
 
 
 CATEGORY:
  Set Manipulation
 CALLING SEQUENCE:

  fulljoin( a,b)

 INPUTS:
  a -       1-D array
  b -       1-D array
 OPTIONAL INPUT PARAMETERS:
 KEYWORD INPUT PARAMETERS:
 NOUNIQ -   Flag, if set, does a straight join across a and b as is.
            Otherwise the a and b arrays are sorted into uniq values.
 PRESERVE-  Flag, if set, and NOUNIQ not set, unique values for a and b
            will be used but they will be in their original order, ie,
            for each unique value, the order of its first appearance.
 OUTPUTS:
 Returns a product matrix  of dimension 2 X (m * n).
 of the form  [ [a0,b0], [a0, b1], [a0,b2]... [a1,b0],... [an,bn-1], [an.bn]]
 KEYWORD OUTPUT PARAMETERS:
 COMMON BLOCKS:
 SIDE EFFECTS:
 RESTRICTIONS:
 PROCEDURE:
 MODIFICATION HISTORY:
       2006/08/16, Written by Peter L. Collins, Lowell Observatory