symbolic differentiator, partly based on SICP examples. does basic algebraic simplifications on result.