Added removeElem to Coproduct

val c: Int :+: String :+: CNil = ...
c.removeElem[Int] must return either an Int and an uninhabited remainder, or an uninhabited Int and a remainder, i.e
c.removeElem[Int] == identity & more generally removeElem == moveToHead.

I haven't quite finished on this one, want to add a few more tests & I'd like some feedback, do you think it's ok to call this removeElem, it seemed to be the natural dual to the operation on hlist (which should return an hlist & then it also == moveToHead).