Take all methods except isNull outside of the typeclass.

This avoids issues where two definitions are logically
inconsistent (e.g. making notNull = isNull).  Furthermore, as it
currently stands GeneralizedNewtypeDeriving doesn't work with the IsNull
class for functions like isNullM; this should fix that problem.