[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
This could be improved.

Also I'm curious what are valid inputs here other than Trig and Hyperbolic?  Are these valid?

```Python
In [1]: C.*Function?
C.BooleanFunction
C.CombinatorialFunction
C.Function
C.G_Function
C.Hyper_Function
C.HyperbolicFunction
C.IdentityFunction
C.ReciprocalTrigonometricFunction
C.RoundFunction
C.TrigonometricFunction
C.UndefinedFunction
C.WildFunction
```