polynomial: finish the new implementation

This basically rewrites the Monomial and Polynomial classes.  The new
implementation should be both safer and probably a bit more efficient
than the old one.

Apart from that the polynomial.h is split into a few separate files
for easier maintenance.
main: update for new {Mo,Poly}nomial implementation
polynomial: improve the performance of compute_symbolic_delta
free-semiring: use raw pointers instead of shared_ptr

There's no good reason to use shared_ptr in subclasses of Node and in
the Evaluator.  And they do add some overhead.
monomial: fix include of free-semiring
cmake: use -DNDEBUG for Release mode

Note that this will disable the assertions (when compiling in Release
mode), which is useful for benchmarks (but not so great for debugging,
so if anything goes wrong you should probably build in Debug mode).