Small bugfix to BoutMesh

When deleting communicators, didn't check if buffers
had been allocated, resulting in segfault.
Fixed small bugs in FieldFactory

Now can supply a mesh to create2D and create3D. Checks
to make sure that it's valid.

Bug in implementation of 't' variable in expression parser
MMS using BOUT.inp settings almost working

o Solver has option 'mms' which if set to true:
  o Uses a 'solution' expression to initialise variables
  o Outputs an error for each evolving variable, named by
    prepending 'E_' to the variable. e.g. 'N' becomes 'E_N'
    Error calculated using the 'solution' expression
  o A source term is added to each variable. Specified as
    'source' in the variable section

o Fixed the boundary factory, so takes brackets into account
  when splitting on commas. This allows expressions to be
  passed through to boundaries correctly.

o Neumann and Dirichlet boundary conditions can take expressions
  as inputs, to implement time-varying inputs
Diffusion example using BOUT.inp settings

Removed most of the MMS-specific code from diffusion.cxx
and replaced with expressions in BOUT.inp.