Caching: return early if we're not meant to cache object

If the key for the object is None, we're not going to store it, so make
a new object and return immediately, rather than looking in the cache
for it.
Make disk cache MPI safe

Rather than every process looking in the disk cache, and potentially
storing a new object there, read on rank zero and broadcast.  This fixes
a potential race condition where one process would read while another
was writing.
Merge pull request #354 from OP2/fix/disk_cache

Make disk caching MPI safe.  Only hit the disk on rank zero and
broadcast the results.
MixedDataSet.cdim returns sum instead of tuple
Check vector/scalar field property on Mat block
Compute mixed block offset on the fly instead of in Arg
Properly compute block shapes for mixed + flattened Arg
Allow flattened mixed Dat and Mat Args
Fixup incorrect uses of cdim in host code gen
Fix host code gen for staging in mixed flattened vectors
Fix extrusion offset computation for mixed flattened
Refactor c_map_init: fit for mixed + flattened
Refactor c_add_offset_map: fit for mixed + flattened
Eliminate code duplication in c_add_offset_flatten
Eliminate code duplication in c_map_decl_itspace
Generate c_map_bcs code also for flattened Mat