How to rebuild the ICU data files.

This is based off of section B in the README.chromium file.

1. Set ICU_ROOT to the directory of the ICU source code in the Cobalt source
   tree, e.g. `$COBALT_SRC_ROOT/src/third_party/icu`.

2. Create a build directory outside of the Cobalt codebase, and make that your
   current working directory.  Set ICU_DATA_ROOT to this directory.

3. Configure the ICU build.  Note that we setup our compiler defines in the same
   way that they are set when building ICU within Cobalt, according to our
   icu.gyp file.

   Run

   ```
   ICU_DATA_FILTER_FILE="$ICU_ROOT/filters/cobalt.json" \
     env CPPFLAGS="-DUCONFIG_NO_LEGACY_CONVERSION=1 -DU_CHARSET_IS_UTF8=1 \
     -DUCONFIG_ONLY_HTML_CONVERSION=1 -DUCONFIG_NO_TRANSLITERATION=1 \
     -DUCONFIG_NO_COLLATION=1" \
     "$ICU_ROOT/source/runConfigureICU" --enable-debug --disable-release \
     Linux/gcc --disable-tests  --disable-layoutex

   ```

4. Run `$ICU_ROOT/cast/patch_locale.sh && make -j 120`

5. Run `$ICU_ROOT/scripts/clean_up_data_source.sh` to clean up the changes
   made to $ICU_ROOT from the call to `patch_locale.sh`.

6. Create a new directory where we will rebuild ICU with different options
    because the options used above will produce a version of the tool `icupkg` (
    which we need to use to translate from little to big endian) that does not
    work.  Call this new directory $ICU_PKG_ROOT.

7. Change directory to $ICU_PKG_ROOT.

8. Run
   ```
   $ICU_ROOT/source/runConfigureICU --enable-debug --disable-release \
     Linux/gcc  --disable-tests --disable-layoutex
   ```

9. Run `make -j 120`

10. Run `export LD_LIBRARY_PATH=$ICU_PKG_ROOT/lib`

11. Run `sudo apt install icu-devtools` to obtain the `icupkg` command and its
    dependencies.  Even though you will be running a locally-built version of
    `icupkg`, you will need the shared libraries installed by this command.

12. Replace the files in this directory with the new files that you have built.
    They will exist as a little-endian package file, but you can use the
    `icupkg` tool to both unpack the files out of the package (which Cobalt
    prefers), and switch from little-endian to big-endian.

    Run:

    ```
    cd $COBALT_SRC_ROOT/src/cobalt/content/icu
    rm -rf *
    mkdir icudt68l icudt68b
    $ICU_PKG_ROOT/bin/icupkg --ignore-deps -tl -x '*' -d icudt68l $ICU_DATA_ROOT/data/out/tmp/icudt68l.dat
    $ICU_PKG_ROOT/bin/icupkg --ignore-deps -tb -x '*' -d icudt68b $ICU_DATA_ROOT/data/out/tmp/icudt68l.dat
    ```


You should now have the ICU data files generated and ready to go in the Cobalt
source tree, and you can clean up any outstanding files.  If there are any
leftover changes in your $ICU_ROOT directory, you can revert them.  At this
point you can re-gyp, re-ninja, and run Cobalt and it should work.

Note that at the time of this writing, the final resulting contents had a size
of 6.7MB, from running the command
`du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt68l`.