Add TextOffsetMap class

This patch adds |TextOffsetMap| class that represents which
parts of a string was inserted or removed during an operation.

|CaseMap::ToLower()| and |CaseMap::ToUpper()| can produce
this data structure with this patch. These new variations use
ICU CaseMap class introduced in ICU 59.

These new variations are not optimized for the performance as
the earlier variations yet.

In addition to unit tests in this patch, a local experimental
run of layout tests with the new variation passed.

This patch does not change existing code paths to use the new
variation of the functions yet. It will be in future patches,
after more performance work and tests are done.

Change-Id: I7b7374a4c050954e52e2db1eb7a1738e91b99189
Bug: 926003, 985201
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1710012
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#679378}
6 files changed