Use recursion rather than iteration for error check in uncolon
Inference has an easier time analyzing recursion (esp if structural
over tuples) than iteration, which is why the rest of this function
is using recursion. With sufficient inlining, LLVM does generally
get rid of the extra error check and branch, but by switching
to recursion, we make things easier on non-LLVM backends.