Potential type instability for integer promotions?

In changing the documentation for #6254, I realized that even the more complicated description of integer promotion is incorrect because `promote(x) = (x,)`.  While I haven't experienced this myself in real code, I think the current behavior here is surprising, particularly when calling promote with a splatted variable-length iterable. This PR adds specialized methods for promote with one SmallSigned/SmallUnsigned argument so the behavior matches the documentation.