prevent solve_radical from growing unboundedly
check for symbol in _has_rational_power
_invert now also returns partially inverted exprs

Earlier solvers.solve_univariate.invert used to return
a set of functions as a inverse of of a given function. If the
invert failed to completely invert the function then used to raise
a NotImplementedError, though a partially inverted solution is also
good enough. To return a partially now the output type is a tuple
with the first element as the partially inverted equation, which is
the given symbol in case it has been inverted completely and the second
element is a set.
solve_univariate: use new _invert and refactoring

- Improved the structuring of solve_univariate_real
- Factor out solve_rational method
- Use better names in solve_as_poly
- Speed improvement: now test_solve_univariate runs in 13s on local machine,
while the tests before the new _invert and refactoring took 26s.
Merge branch 'solver_refactor_invert_changes' into solver_refactor

* solver_refactor_invert_changes:
  solve_univariate: use new _invert and refactoring
  _invert now also returns partially inverted exprs
  check for symbol in _has_rational_power
  prevent solve_radical from growing unboundedly

Conflicts:
	sympy/solvers/solve_univariate.py