Ensure solver parameter updates are propagated correctly

Previously, if you did

   x = FooSolver(..., solver_parameters=bar)
   x.parameters = baz
   x.solve()

the solver parameters used would be bar, not baz.  Change this so that
setting solver parameters updates the SNES options appropriately.  Also
fix bug in the linear case where the solver options set in the
constructor would immediately be overridden.

Fixing this bug necessitates slackening some test tolerances, since now
we do the right thing, we don't solve to the same accuracy.
Expand docstrings of solvers
Pass solver_parameters through to _la_solve
Default to gmres+ilu for _la_solve

This brings _la_solve in to line with the LinearVariationalSolver
options.
Test setting solver parameters