(PUP-2017) Change TupleType size to mean total number of entries

The TupleType was implemented so that the size constraint only
applied to the last type. This was difficult to work with. It is
far better if the size constraint works the same way as for an
array, only that the types can be different per index. Thus a size
constraint of 2,3 for the tuple types t1, t2, t3 means that t1, and t2
are required and t3 is optional. If the size range is > the number of
types, the last type repeats.