A primal-dual interior-point method for nonlinear programming with strong global and local convergence properties