[WIP] Rewriting the Univariate Solver

This PR aims to rewrite a cleaner and robust univariate equation solver.
- [x] polynomial
- [x] rational
- [x] real trigonometric
- [x] write 4 tests to complete coverage
- [x] correct typo
- [ ] correct [this failure](https://github.com/sympy/sympy/pull/7523#issuecomment-62201765)
- [ ] use something like [this](https://github.com/sympy/sympy/pull/7523#issuecomment-62198981) to handle the XFAILed test `test_real_imag_splitting1`

### Nonblocking todo

- [ ] functions solvable by LambertW
- [ ] functions that can be recast as polynomials with a change of variables [this, for example](https://github.com/sympy/sympy/pull/7523#commitcomment-8338203); this can be factored out of solve where multiple generators are handled

I think my suggestion about using an unevaluated set applies here, too. If the `real` attribute is not False, it should be included in the set.