Added template interface to better define expected functions of UserState

- Created a template interface AStarState which defines all the necessary functions that AStarSearch will require of the UserState. This serves as a quick reference and can also ensure a properly implemented class is provided to AStarSearch (enforcable only with C++11 features).