[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
I also tend to write docstrings as single-line description of function followed by empty line, followed by larger description, i.e.

```Python
def func(*inputs):
"""
A brief, single line description of the function

Much more text about how the function works. 
Much more text about how the function works. 
Much more text about how the function works. 
Much more text about how the function works. 
```

I think this is a standard somewhere.  Documentation systems like sphinx expect it.