Refactor Distribution creation routines.

As suggested in person. 

* `Distribution.__init__` takes a global dim_data.

* The old `Distribution.__init__` is now the `Distribution.from_shape` classmethod.

This is on top of PR #322