Avoid redundant cell <-> map conversions

The CellRegion and CellLayer classes prefer map-coords internally since they can be used more directly for array indexing, but their APIs all expose cell co-ordinates.

The lead to a particularly bad case where enumerating the cells of a region would do map->cell converions for you, only to use those cells as an indexer into a layer which would convert the cell back into a map co-ordinate. All the round trips are quite expensive since so many are performed.

This PR adds the ability to enumerate a region in map-coords and then uses this ability in several key places to index into the layer using those map-coords. I didn't fix every use since there's so many.
I agree that it sucks.

At the moment the real problem is that we don't have a type for co-ordinates in map space. They're either passed around as integers or stuffed into a CPos anyway which no doubt confuses everybody.

I'm going for integers where I can as I think that's less evil than stuffing things into CPos which is just outright misleading.

Ideally I think we need to introduce a new type - but that's probably another PR in itself.