Locale data can vary across platforms. Rather than hard-code the expected
data in the units tests, get it from the OS via the C API.
This fixes these unit tests on FreeBSD. It might fix them on Linux, too.
I have not tested other platforms, but I will if I get agreement
on the approach.
I think we should reset the global locale so it's different than the one we pass to std::locale l(...). That way we're testing that we don't accidental use the global locale.