[WIP] Rewriting the Univariate Solver

This PR aims to rewrite a cleaner and robust univariate equation solver.
- [x] polynomial
- [x] rational
- [x] 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

This is a bug:
```
In [7]: solveset_real(x - y, x)
Out[7]: ∅

In [8]: y.is_real

In [9]: 

```

I'm fine if that's a sets module bug (i.e. `intersect(Reals)` or something like).  Otherwise, -1 for PR.