Cleanup bounds, window and affine computation
Cleanup bounds, window and affine computation

First compute the bounds as the intersection of all rasters.  As a
second step, if a mask is being used, compute the intersection of the
mask and the bounds.

Compute the window that needs to be read for all rasters once this
computation has been done.

Order the rasters alphabetically (after conversion to lower-case) so
ensure consistency.

ricardog/raster-project,ricardog/raster-project,ricardog/raster-project,ricardog/raster-project,ricardog/raster-project