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
I'm wondering the the gps heuristic should be passed in from the test method directly rather than a part of the main file since it is using undocumented names like `longRad` and `latRad`.  We could maybe add this into the main file (and document it) in a follow up