add typeOf for NTuples; make NTuple covariant

This pull request will enable defining functions taking NTuples.
1) public methods should have return types.

2) `def ntuple(i: Int)(f: (Int) => String): String` put trailing function args in their own parameter group.