[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
`solve` also can produce set's (but python's ones) as output; this doesn't documented well.  Also, something like `solve2` may be more appropriate, esp. if this a replacement for old solve.

instead of real option, can we consider to use `assume`, like inequalities.py?  @mrocklin ?