Non-tail-recursive ForeignTy

This simplifies the definition of ForeignTy to make it easier to deal with when writing types that must unify with its result. As ForeignTy handles C argument lists, it's unlikely that it will ever be passed a list long enough for linear space use to pose a problem.