add a few line breaks in XYSpec
rename Vec to Vector

I initially didn't want to shadow scala's Vector type, but screw it.
I'd rather have a name that makes sense.
rename XY to CartesianVector

I think this is a little more clear, and will make more sense when
PolarVector is added.
don't memoize CartesianVector magnitude

It just occurred to me that this strategy wasn't thread-safe.

I might consider making this a lazy val, but perhaps memory usage
is a more important concern.

If a user who is going to be referring to magnitude repeatedly could
convert to polar coordinates. Also, I could add another Vector type
that contains both XY and polar coordinates, so users who know that
they'll want to refer to both could convert to that.
implicit IsScalar constructor param, not context bound

The previous strategy resulted in two IsScalar fields on
CartesianVector. This way there is only one.
add some override keywords
add implicit def scalar: IsScalar[Scalar] to Vector

This will allow Vector to define default method implementations.
add default implementation for Vector.xy
rename Vector.xy to toCartesian
CartesianVector can only equal another CartesianVector

Ultimately I think vector equality isn't particularly useful anyway,
due to floating-point roundoff. Exact equality is nice in conjunction
with BigDecimal for testing, but that's about it.
rename IsScalar -> Scalar

I still think it makes more sense the other way, but might as well be in
line with the convention of the core scala library.
make CartesianVector a case class
add ImplicitScalar[S] trait
add Angle[S] trait, Radians[S], Degrees[S]
Add unimplemented Angle.normalize method