Refactor sympy.stats

A few substantial infrastructure changes to `sympy.stats`

1.  RandomSymbols no longer inherit from Symbol, they now inherit from Expr.  This removes a substantial amount of magic and exposes a number of problems in the previous sympy.stats class tangle
2. Most classes now follow the `type(obj)(*obj.args) = obj` rule.  Particularly the domains and pspaces are substantially more consistent
3. All of the FooPSpace classes have been turned into FooDistribution classes.  Note that PSpaces still exist (they are necessary for complex queries) but in the univariate case the information about distributions is pushed down a level.  This is for eventual use with rewrite rules and handcoded CDFs and such.  This is related to [issue 3129](https://code.google.com/p/sympy/issues/detail?id=3129)

This pull request is an effort to clean up sympy.stats so that it may cooperate with unification as an alternative method to simplify statistical queries.

While the infrastructure has been restructured there should be no change to the interface.

The first couple commits are from https://github.com/sympy/sympy/pull/1718 . I expect they will be merged shortly.