Separate public and private path finding API

Instead of exposing all 'internal' functions that e.g. make use of the
path finder monad, I separated the plumbing into a new module
Path.Internal.  This allows us to test the internal methods without
burdening all clients of 'Path' with the large interface of functions.
Add existsPath method to check if a path exists
Introduce dedicated Path type to represent results

Instead of using only a list of Coords, replace it with the Path type.
The difference is, that the Path type contains the pathCost as well.

Another method in the Path module is dedicated to just find the distance
Introduce defaultPath function.

The defaultPath function captures the standard assumptions, that the
heuristic is euclidean distance and all neighbors have a way cost of 1.

This helps dramatically to clean up the specs and should fit most use
cases for clients