[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
On Sat, Jul 12, 2014 at 10:53:00AM -0700, Harsh Gupta wrote:
>    In sympy/solvers/tests/test_solvers.py:
> 
>  >  def test_quintics_1():
>  >      f = x**5 - 110*x**3 - 55*x**2 + 2310*x + 979
>  >      s = solve(f, check=False)
>  >      for root in s:
>  >          res = f.subs(x, root.n()).n()
>  >          assert tn(res, 0)
>  > -
>  > +# IN
> 
>    This test is valid as we don't return RootOf in solve_univariate if we
>    can't solve the given polynomial.

Bad for us.

>    Why we don't return RootOf?

It's a bug.

>    Because RootOf is specific to polynomials and
>    I don't feel it is good to have polynomials as a special case.

But polynomials *is* a special case.

What you suggest to return instead?