Ability to have non-grid layouts

Hello,

Check out my commit and tell me what you think.

Your A* is great but was limited to a grid layout. I've added the ability to handle other layouts, such as a graph of cities.

- Extract grid specifities into the Graph function
- Extract heurstics functions into a specific object
- Update tests, benchmark & demo
- Added a specific test to demonstrate usage and gps heuristic
As I mentioned above, I'd move this heuristic down here for now since all of the lat/lng stuff is handled here.  I could totally see exposing and documenting a standard way of dealing with these `Graphs` based off of this implementation in the future though