La solve class

- Refactor solving.py (which had become rather over-large)
- Add a `LinearSolver` class which users can use to construct solvers for long-lived preassembled systems
- Address #390 by adding `constant_jacobian` kwarg to `LinearVariationalProblem` (default True)

This removes our dependency on PyOP2's solver.  So that could potentially go?