Fix solver parameter setting for linear solvers

Turns out, we ere not doing the right thing, in particular, overwriting the choice of snes_type such that we would actually run newton iterations.

Fix this, and introduce tests of the solver api to ensure we don't break things in the future.

This has necessitated slackening a bunch of test tolerances.  Please check that you are ok with it.