Separate implementation for `DistArray`

This PR does a few things:

- Removes the implementation for `DistArray` out of the header, and into it's own file, `DistArray.C`;
- Instantiates all the template types needed by the codebase;
- Adds some tests for the `DistArray` class.  Coverage for the class went from 45% to 88%.