Sprite: cleanup logic for how to destroy a tile

and remove the dependency on tile numbers
Sprite: destroyTile() should not destroy tunnels or underwater wires
cleanup: remove unused isRoad, isRail methods
cleanup: rename isRoadAny() to isRoad()... ditto for isRailAny()
cleanup: eliminate unused isHospitalOrChurch() function
rewrite repairZone to handle dynamic tiles

also- fix a bug where repairZone() on an unpowerd zone
was incorrect
cleanup: consolidate to a single isIndestructible() predicate