[WIP] Rewriting the Univariate Solver

This PR aims to rewrite a cleaner and robust univariate equation solver.
- [ ] Univariate
    - [x] polynomial
    - [x] rational
    - [ ] trigonometric
    - [ ] functions with exp and log
- [ ] Multivariate
Not sure if this strategy will work.  And actually, you do the same as the current code.  Same subs(), which may stuck with numeric evaluation (remember, you do substitution into something supposed to be zero!).  Additional argument checking - more work to do, not less.  The idea was to start from the leafs of the expression tree, not from the top.