util: templatize Variable::make().
differentiator: node: add and use constructors for TaggedChild<> to avoid using braced-init-list (GCC 4.8).
differentiator: visitor-calculate: fix "uninitialized" warnings.
differentiator: visitor-simplify: implement product expansion by distributive law.

A product of one or more addsub nodes (maybe interleaved with other types of nodes)
is expanded into an addsub node of products.

(a+b)(c+d) = ac + ad + bc + bd