Add facility for data type caching
The current scheme for datatypes will recreate components over and over even though an e.g. MPI_Contiguous can be re-used in the creation of derived data types for multiple communication partners. This series of patches adds a cache that can be used during the creation of a redist to fold redundant MPI datatype creations.