Added Template Expression functions

Simple implementation for testing, along with test case
in

examples/performance/arithmetic

Seems to show significant difference in performance
Merge branch 'optimise' of git@github.com:boutproject/BOUT-dev into mesh
Merge branch 'mesh' of git@github.com:boutproject/BOUT-dev into mesh
Mesh/Field iteration changes

o Added DataIterator class (include/bout/dataiterator.hxx)

  Allows iteration over domain, so this:

  for(int i=0;i<mesh->ngx;i++)
    for(int j=0;j<mesh->ngy;j++)
      for(int k=0;k<mesh->ngz;k++)
        result(i,j,k) = a(i,j,k) + b(i,j,k);

  can be written as:

  for(DataIterator d = result.iterator(); !d.done(); d++)
    result[d] = a[d] + b[d];

  NOTE: This is likely to be modified, and should allow the domain
  to be specified e.g. include guard cells or not

o Marked Field::operator[](int) as deprecated. This routine allows direct access
  to the underlying data array, but can (for now) be replaced by calls to
  either getData (for the raw array) or operator()(int, int, int).
  The (int,int,int) indexing is more efficient, and allows bounds checking
  to be switched on for all dimensions, rather than just X.

  -> Replace [i][j][k] with (i,j,k) in quite a few places around the code