Learning Admissible Heuristics for A*: Theory and Practice