Started Flux Coordinate Independent method

Each Field3D object can now have two associated fields:

Field3D f;

f.yup()  -> Field3D&
f.ydown() -> Field3D&

If mesh->FCI is false (the default), then f.yup() and f.ydown() return
references to f. This is for backwards compatibility, so if FCI isn't used
then no more memory is used than previously.

To enable FCI, switch on in BOUT.inp:

[mesh]
FCI = true

The first time yup() and ydown() are called, they will allocate new
fields. This is the same system used for time derivatives and the ddt() macro.
Added routine to put 3D variables into BOUT++

>>> from input import transform3D
>>> from numpy import zeros

>>> a = zeros([4,6,8])

>>> t = transform3D(a)

t can now be put into a NetCDF file
Fixing test-dataformat example
Changes to Solver classes

o Multiple solvers can now be created, using separate options

o By default solvers don't save anything to dump file, unless explicitly
  added (solver->outputVars(dump)). This is done for the main solver
  in boutmain.hxx or physicsmodel.hxx
  -> Any additional solvers won't corrupt BOUT.dmp.*

o Restart files can be disabled by setting "enablerestart" to false
  in the solver options.
  -> Any additional solvers won't overwrite BOUT.restart.*

o Base Solver class handles all restart file writing, rather than individual
  solver implementations. This made disabling restart files cleaner.

o Small bug in RK4 cleanup fixed

o Bug in new Field3D yup and ydown implementation fixed. Was
  using mesh->FCI in Field3D constructor, which may be called before
  main().
Change yup, ydown getters to return pointers
Add 3D tensors for ints
Add methods to DataFile in order to use python "with" keyword
Add FCI example
Merge branch 'fci' of git@github.com:boutproject/BOUT-dev into fci

* 'fci' of git@github.com:boutproject/BOUT-dev:
  Changes to Solver classes

Conflicts:
	src/field/field3d.cxx
Almost working interpolation
FCI interpolation working in simple cases

Only tested interpolation in Z for now

To plot interpolating function:
o Run "python simple_test.py" to generate the input file
  (simple_test.nc)
o Modify data/BOUT.inp, setting grid to simple_test.nc

o Run fci_slab

o Run "python plot_funcs.py"

This should produce a PDF "plot_funcs.pdf"
Fix sign error in FCI interpolation
Fill in Grad_par_FCI function
Complete physics model and tidy up FCI example
Add FCI class for general use in physics models

Notes on usage:
	- FCI::Grad_par and FCI::Grad2_par2 are NOT straight replacements for
	  difops::Grad_par and difops::Grad2_par2, as the FCI class requires
	  y to represent the toroidal angle and z the poloidal angle.
	- FCI constructor requires a Mesh* as the single argument
	- For OOP physics models, add an FCI member object and supply the
	  Mesh* in the initialisation list for the physics model
	  - e.g. class MyModel : public PhysicsModel {
	  		 private:
			   FCI fci;
			 public:
			   MyModel() : fci(*mesh) {}
			 };
Adding simple wave in a sheared slab test case

Using field-aligned coordinates, testing twist-shift condition.
Mainly for comparison with FCI method.
Add option to keep interpolated fields in FCI
Merge branch 'fci' of github.com:boutproject/BOUT-dev into fci

* 'fci' of github.com:boutproject/BOUT-dev:
  Adding simple wave in a sheared slab test case
Fixed wave-slab example

Used wrong input variable name for Twist Shift angle. Now
using ShiftAngle, so correct angle being used.
Add metric tensor to FCI derivatives

Also add CHECK messages and specify default value for keep argument,
rather than having multiple declarations/definitions.