[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
> Poly can find an unique generator in this case

No, there are two generators `sqrt(x)` and `x**(1/4)`
```
In [7]: Poly(sqrt(x) + sqrt(sqrt(x)) - 4).gens
Out[7]: (sqrt(x), x**(1/4))
```