Remove `Context.from_global_dim_data`

1. Fix `Distribution.__init__` to push `dim_data_per_rank` down to the engines to initialize LocalArrays instead of `shape`/`dist`/`grid_shape`.  It's more general; it allows the creation of irregular block arrays, for example.
2. Set the default value of `dtype` to `float` like in our other array creation methods.
3. Copy the docstring explaining `global_dim_data` from `Context.from_global_dim_data` to `Distribution.__init__`.
4. Remove `Context.from_global_dim_data` and fix the tests using it to first create a Distribution object then pass that to `DistArray.__init__`.