[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
`sqrt(x)` - is the principal square root of x:
```In [1]: sqrt(x)*sqrt(x)
Out[1]: x
```

So, yes.  You should think about rewriting `x` as `sqrt(x)**2`.