Karniadakis solver: tidy restart file writing

Really shouldn't be left to individual solvers
Python routine boutdata.restart.create

Creates a set of restart files from data (dmp) files,
optionally averaging over a number of time-points.
Two main uses:

1. You want to start the simulation from a time for which you don't
   have a restart file. You might need to adjust parameters or resolution
   (in which case other routines are needed to resample the data)

2. You want to find a steady-state solution, and want to damp out
   transient oscillations by running for a few periods, averaging over
   a few periods, restarting and repeating.
Boundary width modifier. Fixes issue #27

To change the width of a boundary region, BoundaryWidth modifier
changes the width of a BoundaryRegion before applying the boundary condition,
then changes the width back afterwards.

To use, in BOUT.inp file e.g:

bndry_core = width( neumann , 4 )

would apply a Neumann boundary condition on the last 4 cells, rather than the usual 2.

When combining with other boundary modifiers, should be applied first e.g.

bndry_sol = width( relax( dirichlet ), 3)

would relax the last 3 cells towards zero, whereas

bndry_sol = relax( width( dirichlet, 3) )

would only apply to the usual 2, since relax didn't use the updated width.

Limitations:

1. Because it modifies then restores a globally-used BoundaryRegion,
   this code is not thread safe.

2. Boundary conditions can't be applied across processors, and no checks
   are done that the width asked for fits within a single processor.
User manual additions

Updated description of boundary conditions, and added a little to
the field expressions (initialisation) section.
Merge branch 'master' of https://github.com/bendudson/BOUT