This relies on global regions from D1834, and on tests from D1833 for confidence.
Rewrite MakeGoalReachable (and FindNearestPassableNavcell) for optimisation.
This, sadly, changes hashes in some situations as it does not guarantee returning the exact same cell as svn.
`FindNearestPassableNavcell` is optimised by relying on the idea that there generally is passable terrain close by, so looking at a small square around us will generally return a positive hit and is faster than the cross-expansion.
`MakeGoalReachable` implements many new strategies relying on global regions:
- For reachable point-goals, it's effectively instant.
- For reachable goals in general, it only has to look at reachable goal regions (which is a _large_ improvement on svn).
- For unreachable goals, it tries to find a reachable navcell close by (and then this goes back to 'instant').
- The worst case scenario is still optimised by sorting regions, as the cost of `RegionNavcellNearest` is higher than the cost of sorting regions in general.
This also introduces a bunch of helper functions to go along with it, and tries to return slightly better point goals than the existing algorithm.
I am reasonably confident in this code as it passes D1833 and @temple already noticed a few issues with it.