A Heuristic Search Algorithm for Solving First-Order MDPs