Add CtsIcu4cTestCases for ICU4C API coverage - Attempt 2

Attempt 2: The test is only for primary ABI, until the Soong limitation
is resolved.
- cintltest and intltest are the executable binaries
  running the devices.
- cintltest and intltest are basically compiled against
  libicuuc and libicui18n, except if the APIs are available
  in the NDK surface in libicu, the test will link that in favour
  of NDK. So the APIs provided in the NDK will have the API coverge,
  while the test can keep using the hidden APIs in libicuuc, and
  libicui18n.
  cts_headers/ are the same as libicuuc and libicui18n headers, except
  that unicode/urename.h is modified by the generate_ndk.py to select
  the NDK API surface.

Bug: 160350521
Test: atest CtsIcu4cTestCases
Test: Inspect the symbol table manually by "objdump -TC cintltst"
Test: build/soong/build_test.bash
Test: Test: OUT_DIR=ndk_out build/soong/scripts/build-ndk-prebuilts.sh
Change-Id: Icf51b09c36eb3b4ef30a5032bdef7af1a76567d9
diff --git a/libicu/cts_headers/umapfile.h b/libicu/cts_headers/umapfile.h
new file mode 100644
index 0000000..92bd567
--- /dev/null
+++ b/libicu/cts_headers/umapfile.h
@@ -0,0 +1,57 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+*   Copyright (C) 1999-2011, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+******************************************************************************/
+
+/*----------------------------------------------------------------------------------
+ *
+ *       Memory mapped file wrappers for use by the ICU Data Implementation
+ *
+ *           Porting note:  The implementation of these functions is very platform specific.
+ *             Not all platforms can do real memory mapping.  Those that can't
+ *             still must implement these functions, getting the data into memory using
+ *             whatever means are available.
+ *
+ *            These functions are part of the ICU internal implementation, and
+ *            are not inteded to be used directly by applications.
+ *
+ *----------------------------------------------------------------------------------*/
+
+#ifndef __UMAPFILE_H__
+#define __UMAPFILE_H__
+
+#include "unicode/putil.h"
+#include "unicode/udata.h"
+#include "putilimp.h"
+
+U_CFUNC UBool uprv_mapFile(UDataMemory *pdm, const char *path, UErrorCode *status);
+U_CFUNC void  uprv_unmapFile(UDataMemory *pData);
+
+/* MAP_NONE: no memory mapping, no file access at all */
+#define MAP_NONE        0
+#define MAP_WIN32       1
+#define MAP_POSIX       2
+#define MAP_STDIO       3
+#define MAP_390DLL      4
+
+#if UCONFIG_NO_FILE_IO
+#   define MAP_IMPLEMENTATION MAP_NONE
+#elif U_PLATFORM_USES_ONLY_WIN32_API
+#   define MAP_IMPLEMENTATION MAP_WIN32
+#elif U_HAVE_MMAP || U_PLATFORM == U_PF_OS390
+#   if U_PLATFORM == U_PF_OS390 && defined (OS390_STUBDATA)
+        /*   No memory mapping for 390 batch mode.  Fake it using dll loading.  */
+#       define MAP_IMPLEMENTATION MAP_390DLL
+#   else
+#       define MAP_IMPLEMENTATION MAP_POSIX
+#   endif
+#else /* unknown platform, no memory map implementation: use stdio.h and uprv_malloc() instead */
+#   define MAP_IMPLEMENTATION MAP_STDIO
+#endif
+
+#endif