Refactors local maps

This PR refactors local maps into a top-level `MDMap` class (Multi-dimensional map) and several 1D map classes: `BlockMap`, `CyclicMap`, `BlockCyclicMap`, and `UnstructuredMap`.  This is a refactoring only -- no API changes, other than the removal of the `IndexMap` class and helper functions.

The intent is to allow a more compact representation of the local maps internal data, and to settle on a consistent API for the local maps.  For instance, `BlockMap` and `CyclicMap` only keep a few integers around rather than generating all indices for their maps.  `UnstructuredMap` does keep all indices around, since it is the fully general case.