STAMPs: A finite-volume solver framework for adjoint codes derived with source-transformation AD