[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
The difference is that a function that doesn't start with an underscore looks like something that you could use somewhere else in SymPy (even if it isn't exported to `from sympy import *`), whereas an underscore function looks like something that should only be used within the same module.