[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
> This won't always work

Then lets remove this heuristics and add methods that always work for some class of equations.

> But the current solve_radical method solves it.

Can you describe (without recursion!) the class of equations, which the current solve_radical can solve?

> No, this isn't simple rewriting/substitution of sqrt(x)

Yes.  This is a some random heuristics.