Update to template argument names to reflect current documentation
Initial work on range-based image looping

This allows this kind of syntax:

Image::Loop loop;
for (auto dummy : loop.over (vox1, vox2))
  vox1.value() = vox2.value();

This also removes the limit of 3 VoxelTypes over which the loop can iterate.
new apply() method to perform the same operation over a tuple

Now used in Image::Loop & Image::LoopInOrder.
Remove range-based for loop, and introduce LoopIter class instead

Range-based for loop syntax is problematic since the iterator would be an
unused dummy variable, which the compiler would warn against. Instead, there is
a new Image::LoopIter class, which can be used as follows:

Image::Loop loop;
for (auto i = loop (vox1, vox2, ...); i; ++i) {
  ...
}
Use new image looping constructs throughout
Simplification of Image::ThreadedLoop using C++11 variadic templates

Removes any limitations on the number of voxels it can loop over.

Also introduces functions to help handling tuples:
- apply (somefunc, tuple) will run somefunc(std::get<N>(tuple)) for each member
of the tuple
- unpack (somefunc, tuple) will run somefunc (std::get<0>(tuple),
std::get<1>(tuple), ...) and return the result.