Compositional Generalization via Neural-Symbolic Stack Machines