util, differentiator: implement opportunistic rational arithmetic for variables, store all data in boost::any.

Now all variables hold their values in boost::any. All tree operations have been modified to
choose from floating-point arithmetic, rational arithmetic and graceful exit in case of emuty value.

Variables can be specified as floating-point, rational or bare (without value), and in runtime
the appropriate action is taken when processing each subtree. Rational arithmetic is always preferred.