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.