It's PathFinding year...

It looks like PathFinding should be added to death and taxes, at least if you’re writing your own game. I finished this, it is tailored to the game I’m making.
It is slow and not really precise and generally speaking I don’t trust it, not even a little, but it has the advantage that it works with the well known “you lazy sloth” interface:

path = PathFinder.newPathFinder().findPath(a, b)

where a and b can be gameobjects or locations.

It works in the simplest possible way: it divides space in cells of some size, uses the cells as nodes and determines nodes’ neighbourhoods raycasting. A lot.

On the pro side, it acquires data from the scene as it changes, so it can avoid moving obstacles and - not implemented - move on a dynamic surface.

Video:

Zip with source (“I couldn’t care less” license).
http://www.tukano.it/blender/PathFinder.blend.zip

I haven’t found a way to let it decide what is the terrain and what is the rooftop of a building so to keep track of terrain slopes one has to give the PathFinder instance a new getTerrainHeightAtXY function - the default one assumes everything is flat at 0.5.