Move assemble to separate file

Doesn't really belong in solving.py
Move variational solvers to separate file
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
Merge pull request #396 from firedrakeproject/la_solve_class

* la_solve_class:
  Test constant_jacobian option to LVS
  Add option to LVS for constant jacobian
  Vec context managers set halo dirty bit already
  Rationalise different solver utility functions
  Add user-facing LinearSolver class
  Move variational solvers to separate file
  Move assemble to separate file
wrap finite element creation to support quadrilaterals
make _dofs_per_entity calculation quad-compatible
cell_node_list for quadrilaterals
refactor entity_dofs flattening
quadrilateral utility mesh creation
fix boundary domains for quadrilateral meshes
fix output for quadrilateral meshes
solve edge orientation problem
test cases for quadrilateral meshes
FunctionSpace-independent _cell_closure calculation
introduce QuadrilateralMesh class
refactor cell_node_list creation

The affected code snippet is a canonical code smell (Switch Statements
[1]). Further details, for example at [2].

[1] http://c2.com/cgi/wiki?SwitchStatementsSmell
[2] http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism