Sample spaces and rearrange order for initialization.

Previously, (joint) distributions built alphabets for each r.v. from the outcomes passed in at initialization.  Then, the sample space of the probability space was assumed to be the Cartesian product of those alphabets.  This ended up not being flexible enough, especially as it related to join/meet operators.  So now, distributions will set the sample space to be whatever you choose it to be (or equal to the outcomes if sample_space is None at initialization).

Also, the constructors used to be:  Distribution(pmf, outcomes) and are now:  Distribution(outcomes, pmf).