Use a class for the structuring element in Footprint grows.

This replaces the previous definition, based on std::map, and makes it
possible to have asymmetric structuring elements. We can therefore use the
RLE-based technique to grow in any (or all) of the up/down/left/right
directions.