Add constructors that take shared ptr to iterative solvers
This MR add constructors for IterativeSolvers that take std::shared_ptr instead of references.
This MR add constructors for IterativeSolvers that take std::shared_ptr instead of references.