Fix Jet casting problems, and other fixes.

This PR is based on #331. It also fixes an issue that has been present for awhile: synthesizing extra type class instances unnecessarily.

Consider this somewhat-contrived example:

```scala
def cutoff[A](ns: List[Jet[A]], m: Jet[A]): List[Jet[A]] = ns.map(_ % m)
```

Assuming we had the correct implicits in scope, we'd prefer to use the same `VectorSpace[Array[T], T]` instance for each member of `ns`. However, the design of `Jet[A]` made it difficult to achieve this while passing `ClassTag[A]` (which can be used to build a `VectorSpace[Array[T], T]`).

The final commit ensures that `Jet[A]` asks for the instances it needs in these cases.