A primal-dual algorithm for nonlinear programming exploiting negative curvature directions