[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 you think this will work? No reason to believe that the number of radicals (or the _deepest_radical) will be decreased.

This won't always work, the `if` clause was to prevent the expression to grow boundlessly.

> you can solve polynomial equations in y, where y is some radical, e.g. `y=sqrt(x)`.

This won't work in example like `sqrt(x) - sqrt(2*x + 1)`, the expression is not of the form `sqrt(poly(...))`. But the current `solve_radical` method solves it.

> this strategy is the same as for your _solve_univariate_real_trigonometric_2. Another poly generator - the only difference.

No, this isn't simple rewriting/substitution of `sqrt(x)` into `y`. See my [blog post](http://hargup.github.io/posts/week-10.html). Aaron also proposed the `sqrt(x) = y` method in the comments thread.