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
file-format: rewrite save() to use a new XML-based file format

a file format that I just made up
file-format: writeMap() use tags to indicate where new rows start
file-format: ability to read in history arrays from xml
file-format: complete XML load implementation
file-format: fix a bug in XML_Helper
file-format: use Boolean.toString rather than hardcoding "true"/"false"
file-format: move taxRate and budget levels from <misc> to <budget>
file-format: check gameLevel against range when reading from xml
file-format: markup history with <shortTerm> and <longTerm>
file-format: save/restore the "noDisasters" option
file-format: keep misc sanity checks in place
file-format: move timing information into <cityTime> child element
file-format: do not synthesize compatibility bits

since there's no software we need to be compatible with