Dispatch on C/Python Expressions based on "eval" attribute

It's not safe to check for a .code attribute in an Expression and assume
it's a "C kernel" one, since the user may have subclassed expression and
called the superclass __init__ method.  Instead, check for eval and
assume that if it exists we have a Python Expression.
Merge pull request #416 from firedrakeproject/notice_user_expressions

* notice_user_expressions:
  Dispatch on C/Python Expressions based on "eval" attribute