differentiator: node, visitor-simplify: refine and extend Node::MultiplicationDivision's methods for constant management.

Existing method Node::MultiplicationDivision::get_constant() completely ignored
the reciprocation flag, which was OK for the only particular usage of this method
so far, but well.
differentiator: visitor-simplify: implement folding of "a*X" + "b*X" into "(a+b)*X".
differentiator: node: mark ::Dump() methods as const.
differentiator: node: implement custom operator<<() for std::ostream which dumps the dubtree.
differentiator: visitor-simplify: pass correct negation flag to the addsub-muldiv folding function.
differentiator: main-*, also print simplified version of the original expression.