Properly set and delete options in PETSc database

Deleting options from the database immediately after setFromOptions
causes some options not to be applied (e.g. fieldsplit options), so
only delete them when the Solver is garbage collected.
Set up fieldsplit IS when using a fieldsplit PC

Using fieldsplit preconditioners would previously fail because the
fieldsplit IS wasn't set up.
Re-structure the expression expander, track decls
Split exprs fully if no info on the length. Simplify code.
Licm optimization now supports multiple levels
Implement precomputation of constant terms
Solver: only do fieldsplit IS setup if operator changes
Merge pull request #379 from OP2/solver-fixes

PyOP2 Solver: set up fieldsplit IS, fix options

* Properly set and delete options in PETSc database
* Set up fieldsplit IS when using a fieldsplit PC
Fix host code gen for interior horizontal facet

We need to build a loop of length twice the shape of the iteration
extent, since the map doubling happens implicitly.
Merge pull request #381 from OP2/fix/ext_int_horiz_facet

* fix/ext_int_horiz_facet:
  Fix host code gen for interior horizontal facet
Implement translation into BLAS calls
Implement support for Eigen library
Minor fixes, improve comments
Fix subtle bug when padding arrays
Python 2.6 backward compatible import of OrderedDict
Merge pull request #377 from OP2/coffee-mmm

COFFEE supports dense linear algebra libraries

COFFEE can now transform left-hand side kernels into sequences of calls
to linear algebra libraries' DGEMM. So far, MKL, ATLAS and EIGEN are
supported, and the code can be easily extended to other libraries.
Plan: allocate correct amount of space for temp arrays

Entries in the exec halo of Maps may point to non-exec halo set entries,
we therefore need to allocate total_size rather than exec_size space.
We didn't notice this previously in Firedrake because we only ever had
exec_size being equivalent to total_size.
Merge pull request #384 from OP2/plan-fix

* plan-fix:
  Plan: allocate correct amount of space for temp arrays
Added a load method to the Dat class.
Ensure that 'filename' has a .npy extension.