And add some tests and make it actually work correctly.
It's modestly faster, significantly more type-safe, and doesn't assert when there's too few arguments, which causes problems for plural forms. Closes #1733.