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?
I am guessing that this is implemented as a `sum()` call followed by division b/c `mean()` currently blows up for large images? Sensible if so - let's just remember to come back and change this once `mean()` is fixed (which should be very very soon - I've got the code on a local branch...) Issue with doing this as a `sum()` is just the risk of overflow with uint8's and other small data types.