printf tweaks, fixes, and BigFloat support

@StefanKarpinski 

with Keno's tuple work, we don't need to use global values for most of these return values. Although we still use the static buffer for DIGITS, the others can be returned on the stack without impacting performance.

And it's a net deletion of 1 LOC, uses 1 fewer macro, and (hopefully) will make adding BigFloat support more straightforward