Decomposition and Dynamic Cut Generation in Integer Programming : Theory and Algorithms