compute cost once and store with candidates instead of continualy recomputing during each sort
focus cost function on just estimated number of moves, add cost of existing within best first fn