usage: extend the ASearchNode class and implement IGoalNode interface ISearchNode AStar.search(ISearchNode initialNode, IGoalNode goalNode)