Time-Dependent Density Functional Perturbation Theory: new algorithms with applications to molecular spectra