[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
Given the kind of dispatch on type that we're seeing it might make sense to rewrite this as a bunch of `_eval_invert_real` methods on the appropriate classes.  I remember bringing this up before and there was some good reason why it wasn't done.  Just thought I'd bring it up again.