A Primal-Dual Algorithm for the Generalized Prize-Collecting Steiner Forest Problem