ScalaCheck saves the day!

So, I went ahead and cleaned up the tests a bit, which included adding
a bunch of ScalaCheck properties. As soon as I did, the bugs started
popping out of the woodwork. There were three major classes of bugs:

1. Zero coefficient terms ending up in the map
2. Generating terms with the same degree via Map#map
3. Everything else

Type #1 was the most common. I ended up making the default constructor
private, and adding a factory method that removes zeros from the map
before calling new. I also added a few other strategic filters.

Type #2 caused problems with multiplication, and would potentially
have caused problems with the Iterable[Term[C]] constructor as well.
The issue here is essentially:

  Map(1 -> 9, 3 -> 6) map { case (k, v) => (k % 2, v) }

This returns Map(1 -> 6), since it discards the earlier (1, 9) tuple.
Obviously this caused us some problems.

Type #3 just encompassed everything else. The most notable bug here
was an issue when dividing by constants, where quotMod would hit a
divide-by-zero bug. I just special-cased that, which appeased
ScalaCheck. There may be a more principled solution.