basic implementation of symbolic differentiation
reduce complexity of the differentiation result by changing make-sum and make-product
solve exercise 2.56, extend the basic differentiator with exponentiation