From Trees to DAGs: A General Lattice Model for Symbolic Execution