JSON i18n shim: Only register LocalisationCacheRecache handler once

Because LocalisationCache::recache() includes PHP shims each time it is
called (e.g. for a different language), in such cases as automated testing,
the shims could end up registering handlers many times instead of only
once, leading to a rather significant, progressively worse slowdown.

Checking whether the shim has already been loaded, and if so, not
registering the handler again, avoids this performance problem.

I also made the shim compatible with PHP 5.2 (minimum PHP version for
MW 1.17 - 1.19) by avoiding closures and __DIR__, and I added a
--shim-only option to generateJsonI18n.php to allow regenerating
existing shims.

Bug: 63928
Change-Id: I3bb39e7d2bb094873061b3b2adf7066bf26c1b71
(cherry picked from commit e0736bd1cdb3c2971baf344006f474580b8e326c)
Merge "JSON i18n shim: Only register LocalisationCacheRecache handler once" into REL1_23