because calling toString() in stdarg is slow, impure, can allocate memory and throw

The ongoing battle to scrub non-essential unsafety, impurity, throwing, and allocation out of all runtime library code. This pulls it out of stdarg.