Formerly, when a self-reference like `self(Tuple<number>)` was encountered,
but the `Tuple<number>` instance of a `Tuple<T>` implementation for this
operation had not yet been instantiated, the reference would be fulfilled
with a call to the catchall implementation for `Tuple`. Now the
necessary instance is instantiated on the spot and referred to instead.
This change is used to complete return-type specification for all of the
Tuple functions.