Some clean up and a bit of restructuring.

This commit does several different things:

 1. Remove the vector space type classes
 2. Have additive/multiplicative groups mirror basic groups
 3. Add methods to determine commutativity
 4. Fill in some other gaps

The biggest thing is probably #1. We're actively working on
changing how Spire handles vector spaces, so it would be a
bad idea ot reify the "old" design here.

Change #2 is just about consistency.

Item #3 is an attempt to better handle optional properties.
Basically, there are two situations where you care about
commutativity:

  a. Your algorithm *requires* it
  b. Your algorithm permits optimizations if it's available

Having Monoid and CommutativeMonoid as separate types solves
issue (a) pretty well. However, it doesn't work for issue (b).
We introduced the Priority type class to help with that
situation, but that seems like overkill in this case.

The new design is that the user can all .isCommutative (or
.hasCommutativeAddition or .hasCommutativeMultiplication).
This will allow convenient switching on the property at
runtime. Of course, the Priority type class could still be used
if that is preferred.

The last item #4 is just about some documentation additions
and additions to Sign and Signed.