I would prefer Containers::Distributed::Array, Containers::Distributed::Vector and Matrices::Distributed because we have Matrices::Dense and also, the other matrices are not in Containers.
We should do the same with meshes, probably having Meshes::Grid, Meshes::Distributed::Grid and so on.
The partitioner splits the global range among the MPI processes and the subrange represents the local part of the global range. They are used in DistributedArray, DistributedArrayView, DistributedMatrix and implicitly in DistributedVector and DistributedVectorView.
Ok, remember that we plan to split sparse matrices into something like SparseIndexer which, in fact, would be the core of the sparse matrix format. The matrix itself would be then just the indexer and data. The SparseIndexer could be considered as a part of Containers. So lets put the Partitioner and Subrange into Containers or Containers::Algorithms.