add typeOf for NTuples; make NTuple covariant

This pull request will enable defining functions taking NTuples.
this is confusing. The `T` here is not the same as in the trait. Can you instead put `R` or something?