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
Add test that different linear solve paths are equivalent

solve(a == L, out) should be the same as
solve(assemble(a), out, assemble(L))
Merge pull request #49 from firedrakeproject/solver-parameters

Fix the setting of solver parameters on FooSolver objects.
Previously, the solver options were only set in the constructor.  Hence
the following did not work:

    solver = FooSolver(...)
    solver.parameters.update(...)
    solver.solve()              # updated parameters ignored

Fix this by updating the solver options at the beginning of every solve
call.  As a side effect, the linear solver now actually only does a
single newton iteration!  Furthermore, fix up the parameters in
_la_solve to match those in the variational solve call.