Array-backed Sparse Polynomials, type class instances moved to methods, and some other minor updates

The main change here is the refactor of PolynomialSparse to use ordered array to store the exponents/coefficients rather than a Map.

This also removed the type class instances from the class constructor, moving them into the methods instead. This made equals/hashCode a little messier.

More type class instances have been added (Semiring, Rig, Rng, Module, VectorSpace, and Eq) for Polynomials.

A minor change to GCD to have "nicer" (subjective) results when the GCD has degree 0.

New overloads of spire.math.gcd that take a list of numbers, rather than just 2.