Program Synthesis With Best-First Bottom-Up Search