Sparse polynomials

This branch is a work in progress cleanup of polys module and merge with lpoly2. For now I merged basic structure and arithmetic of lpoly, created bridge between dense and sparse polynomial representations, rewrote most tests/doctests to make them human readable, ported Groebner bases algorithms to lpoly and fixed a few bugs. There is still a lot of work to be done to merge remaining lpoly's code and switch polys to use sparse representation by default (this most likely will happen in a later branch). Note that this branch is a major rewrite, so if you want to make any bigger changes to polys in the meantime, please consult it in this pull request first.