Purge extents argument to IterationSpace constructor

It's unncessary since it can be reconstructed from the block shapes.
This also avoid an inconsistency in the way the extents were
previously determined: we were taking the tuple of arities of the
maps of the last argument, which is wrong if not every arg uses the
same map.

While at it, consistently name variables that refer to the block
shape block_shape.
Iterate over the map arity instead of IterationSpace extent

If we have a vector-valued Dat, the extent will be scaled by the
vector length and therefore overrun the map arity.