Overhaul cleaners plugin; Add Maps::isPlantInBox
Overhaul cleaners to use cuboid selection instead of operating on entire map only. Can now remove grass (or just unused grass events for performance), skip cleaning blood/vomit/ooze when performing other cleanings, and counts arrow debris removal as affecting block.
Now uses argparse, which will affect existing command syntax. spotclean now just calls the existing map cleaning fn with a 1x1x1 cuboid. It could probably be replaced by an alias, assuming those work with hotkeys.
Removed clean plants option, as this was just rainwater (which evaporates and will be reapplied when it rains).
Moved a plant plugin utility fn out to Maps::isPlantInBox because it was going to be used for plant contaminant removal. This will detect if trees intersect with a box, so someone might have use for it.
Made burrows.cpp use Maps::forCoord instead of a nested x,y,z iterator.
Made tile-material.lua use maps.getPlantAtTile and handle tree root material properly.
Need to properly document syntax changes and clean plant removal.
Sorry for the delay -- could you update this PR and resolve conflicts?