Symbolic Dynamic Programming for First-order POMDPs