Android patch: libicuuc loads data files without an explicit call

Lazily load the data files in openCommonData() in udata.cpp.

With this change, libandroidicuinit is only called and linked
in one place in libicuuc.

Pros:
1. System or app executable doesn't need to call an Android-specific
   functions to load .dat files before using it.
   The examples of system executables are the media server and sqlite
   shell. This together with the new ICU4C NDK API opens the use case
   for app to run an executable without knowing the .dat files locations
2. Single place in libicuuc.so initializes itself with a single global
   guard and cleanup by the common u_cleanup() call.
3. For the ART mainline module, this eliminate the need for ART module
   to call AIcu_register() during the zygote init. The current solution
   of initializing in JNI_OnLoad is not nice because 2 copies of
   the libandroidicuinit static library in libandroidicu and libicu_jni
   may violate the One definition Rule and initializes twice (very low
   chance because we know the places initializing it.)
4. For i18n Mainline, it eliminates the need to add Android-specific
   APIs, e.g. AIcu_register(), for initialization.

Cons:
1. Large patch in udata.cpp may cause more work to maintain the patch in
   the future.

Also, add a .bp file to run the sample BreakIterator program.

Bug: 132621877
Bug: 160350521
Test: device boots
Test: Inspect logs of initialization from zygote, media server and sqlite3 shell
Test: atest CtsIcu4cTestCases
Change-Id: I57896d457fa585f6653d6e4f978632459bf7b1be
3 files changed