[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
Yeah, convention is to put simplification logic inside the lower-cased function `imageset` and keep `ImageSet` rather logic free.  The sets module doesn't follow this convention very well though.  Classes like Union and Intersection have lots of simplification logic in them.