Constant mangling

UFL now no longer supplies separate types for Constant, VectorConstant
and TensorConstant.
ufl.Expr now lives in ufl.core.expr.Expr
Update to new UFL class setup

New UFL classes must be decorated with ufl_type decorator.  However, for
classes not defined in UFL itself, this is not sufficient because they
now don't live in the correct "set of all classes" (which is built on
UFL import).  To get around this, build our own decorator that forwards
to ufl_type and updates the class sets accordingly.
Fix GC issue for upstream UFL changes

Mesh objects are part of a reference cycle, since they hold on to a UFL
Domain which in turn references the Mesh.  But UFL objects have gained a
python-level __del__ which prevents collection of this cycle in
python2.  To work-around this, given that the default __del__ ob
ufl.Expr is a no-op, just remove it from the class definition after
importing UFL in firedrake.__init__.