WIP: Incremental progress on sparse polynomials

The name of this branch (`new-polys`) may be a bit confusing, because it doesn't go that far, but there is enough work done to merge it soon. In this branch:

- [x] improved support for real and complex domains (previously #1921)
- [x] switched PolynomialRing and FractionField to use PolyElement and FracElement instead of DMP and DMF
- [x] use code generation to improve speed of monomial ops (instead of looping over items of monomials, unpack monomial tuples and execute every op explicitly, see `MonomialOps`)
- [x] other optimizations to PolyElement, FracElement and PythonRational (some significant)
- [x] added caching of PolyRing and FracField (faster `==` or just use `is`)
- [x] added `@public` decorator (very rough and limited implementation)
- [x] started cleanup of polys' modules (for now split monomialtools.py into monomials.py and orderings.py)
- [x] create custom `PolyElement` per `PolyRing` to simplify `isinstance(g, PolyElement) and ring == g.ring` to `isinstance(g, ring.dtype)` (among other benefits) (the same for `FracElement`/`FracField`)

What remains to do is to:

- [x] fix two test failures in test_risch.py (test_residue_reduce, test_integrate_nonlinear_no_specials)
- [x] fix test failure in test_solvers.py (test_exclude)
- [x] fix doctest failure in solvers.py (`solve(x**2 - y**2/exp(x), y, x)`)
- [x] fix very weird doctest import failure in Py3 (`bin/doctest sympy/polys` crashes)
- [x] remove Cython support
- [x] uncomment a test in test_risch.py (test_hermite_reduce)
- [x] investigate Piecewise integral

There is one downside of this PR. I couldn't, yet, remove old PolynomialRing and FractionField (those using DMP and DMF), because I didn't want to dig into agca module. I will rewrite agca at some point, unless someone would like to step up (@ness01?).