Make Basic::diff() return Derivative

Previously it raised a "not implemented" exception. Now it simply returns an
unevaluated derivative.
Test that abs(x).diff(x) does not raise exception
Make sure abs(x).diff(y) == 0

Previously it returned a Derivative
Add C++ tests for abs(x).diff(y) == 0
Merge pull request #333 from certik/abs_diff

Polish abs(x).diff()