Simple implementation of newlocale / freelocale.

This removes a couple of errors from libcxx test suites.
Don't rewrite multiplication by 0 as 0.

This isn't safe when floats are involved as -1 * 0 is -0, not 0.
Add test case for zero multiplication.
Merge pull request #1641 from waywardmonkeys/fix-negative-zero-bug

Fix negative zero bug
Merge pull request #1642 from waywardmonkeys/newlocale-freelocale

newlocale and freelocale