Add a `from_dim_data` method to Context

Add a method to `Context` that takes a `dim_data_per_process` and returns an empty DistArray of the specified size, dimensionality, and distribution type.

Unlike the corresponding LocalArray method, this doesn't take a `buf` argument (or `buf_per_process`).  I could easily have such an option where a sequence of buffers is pushed to all the engines and each engine selects the one meant for it (like I do with `dim_data_per_process`), but buffers can potentially be very large and I'm not sure how to push a different buffer to each engine (in parallel).