Allow assignment into non-mixed FSes from indexed MFSes

Previously, it was not possible to write:

    V = FunctionSpace(...)
    W = V*V
    w = Function(W)
    v = Function(V)
    w1, w2 = w.split()

    v.assign(w1)
    v.assign(w2)

Despite the function spaces being compatible.  It turns out to be quite
simple to allow, so do so.
Merge pull request #400 from firedrakeproject/assign_from_indexed_mfs

* assign_from_indexed_mfs:
  Allow assignment into non-mixed FSes from indexed MFSes
Lint fixes
some missing dependencies
Merge pull request #405 from firedrakeproject/build_docs_dependencies

some missing dependencies
add test for mixed Coefficient Piola transforms
Merge pull request #409 from firedrakeproject/test_piola_mixed_fn

add test for mixed Coefficient Piola transforms
missing quote
Merge pull request #408 from firedrakeproject/doc_typo

missing quote
Next attempt at getting the cell right.
turns out vectors are not scalars
missing subscript
Handle OuterProductElements
now with extra testing goodness
Merge pull request #404 from firedrakeproject/manifold_cell_again

* manifold_cell_again:
  now with extra testing goodness
  Handle OuterProductElements
  missing subscript
  turns out vectors are not scalars
  Next attempt at getting the cell right.
refactor reading mesh files

The following methods are made static:
 - Mesh._from_gmsh
 - Mesh._from_exodus
 - Mesh._from_cgns
 - Mesh._from_triangle

They now return DMPlex objects.
move coordinates property
apply metaclass magic
refactor ugly hack

MPI + DMPlex problem appears.
fix plex distribution problem for the parallel case