Image registration

This PR adds support for performing image registration on an `Images` object. It is part of the new `improcessing` package, which is designed for image processing routines that are more complex than the simple filtering operations available directly as methods on an `Images` object. The `Register` class is designed as an abstract method that handles distribution; subclasses, such as the initial example `CrossCorr`, implement methods for estimating and applying transformations. 

Key features
- Simple pattern for adding new registration methods
- Helper method for computing a reference image / volume
- Supports both applying the transformation to the images / volumes, or directly returning the transformation parameters

Based on a prototype developed by @d-v-b

@industrial-sloth take a look and let me know what you think?
Another minor point: as a general rule, for reproducibility I'd prefer if unit tests that relied on random data also explicitly set the random seed. For instance, `random.seed(17)` (or whatever your favorite number happens to be) prior to the randn call. Otherwise in principle we run the risk of having tests that randomly fail some times and work at other times, although in these particular cases I think we're pretty safe.