Add user-facing LinearSolver class

Use it in _la_solve.
Rationalise different solver utility functions

Once and only once a number of repeated settings.
Vec context managers set halo dirty bit already

No need to do this manually.
Add option to LVS for constant jacobian

If the bilinear form in a LinearVariationalSolver did not depend on any
time-varying coefficients (say) we would reassemble it in a timestepping
loop anyway.  Fix this by allowing the user to specify if the Jacobian
is actually constant (defaults to True).
Test constant_jacobian option to LVS