I don't think it matters for this PR, but just fyi, there is sort of a way to do this with traits.  The trait just needs to declare the manifest as a method, and the concrete class must expose that implicit manifest in the method.  eg.

```
scala> trait Blah[T]{
     |    implicit def manifest: ClassManifest[T]
     |    def foo = new Array[T](5)  //this wouldn't work w/out the ClassManifest
     | }
defined trait Blah

scala> class Ooga[T:ClassManifest] extends Blah[T] {
     |   def manifest = implicitly[ClassManifest[T]]
     | }
defined class Ooga

scala> new Ooga[String].foo
res0: Array[String] = Array(null, null, null, null, null)

scala> new Ooga[Int].foo
res1: Array[Int] = Array(0, 0, 0, 0, 0)
```

So if we want to do this with traits, we just need to have `RDD` expose the manifest in a method that the trait can use.

a bit more info on this here : http://stackoverflow.com/questions/14621168/union-types-as-bound-for-type-parameters-of-a-trait-scala
(question itself isn't relevant, but answer explains more generally)