NOX: An Object-Oriented Nonlinear Solver