A* algorithm

This PR implements 2 methods for the A* algorithm. One method returns a map of predecessors from source to target, and second method returns the total length(cost) of the shortest path from source to target.