[WIP] Rewriting the Univariate Solver

This PR aims to rewrite a cleaner and robust univariate equation solver.
    - [x] polynomial
    - [x] rational
    - [x] trigonometric
    - [ ] functions solvable by LambertW
Why still can solve such trivial things?  Poly can find an unique generator in this case:
```
In [9]: Poly(sqrt(x) + sqrt(sqrt(x)) - 4)
Out[9]: Poly(sqrt(x) + x**(1/4) - 4, sqrt(x), x**(1/4), domain='ZZ')


```