Add better unit tests and imbue C locale in floating point to_string

ToStringTest.cpp is a better place than JSONProtoTest.cpp for to_string
tests. Move global locale-related unit tests there.
Also imbue the C locale in the floating point to_string functions to avoid
decimal number strings formatted with comma instead of decimal point.
In Dockerfiles, install de_DE locale because it uses decimal comma.
diff --git a/build/docker/ubuntu-bionic/Dockerfile b/build/docker/ubuntu-bionic/Dockerfile
index 0407a6f..a11e9ba 100644
--- a/build/docker/ubuntu-bionic/Dockerfile
+++ b/build/docker/ubuntu-bionic/Dockerfile
@@ -258,6 +258,7 @@
 `# Locale dependencies` \
       locales && \
     locale-gen en_US.UTF-8 && \
+    locale-gen de_DE.UTF-8 && \
     update-locale
 
 # cppcheck-1.82 has a nasty cpp parser bug, so we're using something newer
diff --git a/build/docker/ubuntu-disco/Dockerfile b/build/docker/ubuntu-disco/Dockerfile
index a175ed5..de99574 100644
--- a/build/docker/ubuntu-disco/Dockerfile
+++ b/build/docker/ubuntu-disco/Dockerfile
@@ -260,6 +260,7 @@
 `# Locale dependencies` \
       locales && \
     locale-gen en_US.UTF-8 && \
+    locale-gen de_DE.UTF-8 && \
     update-locale
 
 # cppcheck-1.82 has a nasty cpp parser bug, so we're using something newer
diff --git a/build/docker/ubuntu-xenial/Dockerfile b/build/docker/ubuntu-xenial/Dockerfile
index 1c4373e..441b692 100644
--- a/build/docker/ubuntu-xenial/Dockerfile
+++ b/build/docker/ubuntu-xenial/Dockerfile
@@ -240,6 +240,7 @@
 `# Locale dependencies` \
       locales && \
     locale-gen en_US.UTF-8 && \
+    locale-gen de_DE.UTF-8 && \
     update-locale
 
 # Clean up