Implemented 2nd and 4th order Neumann and Dirichlet boundary conditions, however have not tested yet. Also fixed the old Neumann implementation which had a bug if set to a non-zero value on the y boundaries (it set the grid spacing as dx regardless of whether it was an x or a y boundary).
Bugfix to upgraded boundary conditions: apparently the solver does not like to have NAN values even if it does not have to evolve them; changed the '#ifdef CHECK' values in the 2nd order routines to be 1.e60 instead of NAN.
Another bug fix: BoundaryRegionYDown::next1d() needed x++ instead of x--
Added option to use free boundary conditions: If any field has free boundary conditions on a boundary (xin, xout, ydown or yup) it sets a bool in Mesh to true (mesh->freeboundary_*); the derivatives in the guard cells of that boundary are then calculated using non-centred differences so that ddt(*) in the guard cells can be calculated. The free boundary condition then just refrains from setting either the field or the time-derivative in the guard cells on the boundary or boundaries where it applies, thus allowing them to evolve. The implementation does not yet extend to flux- or upwinding-derivatives and the interaction with staggered grids is almost certainly not correct. Also it is probably not as neat as it could be, derivs.cxx in particular could probably use tidying up somewhat.
Free boundary conditions upgrade: tidied up derivs.cxx somewhat, added implementation to 4th derivatives
Merge branch 'boundary_conditions_upgrade' into next