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 seems to be the natural dual to the operation on hlist but maybe it should be named differently, if removeElem on hlists is changed to return a hlist too then that will also == moveToHead and probably should get a new name too (no need to wait for SI-5414 then)