Rewrite WebFontInfo::familyForChar to be much faster

This was an epic perf win for Layout time on all
international pages on Linux (and likely ChromeOS).

For example, on blog.163.com went from:
Layout: Layout= 5815.29980469 ms
Layout_avg: Layout_avg= 111.832688552 ms
Layout_max: Layout_max= 4806.04858398 ms

To:
Layout: Layout= 977.805175781 ms
Layout_avg: Layout_avg= 22.2228449041 ms
Layout_max: Layout_max= 364.959472656 ms
(still awful, but much better).

FontConfig is still the top of a --single-process
profile for many international sites (all the
FontConfig code normally executes in the Browser
process) but after this change FontConfig accounts for
2-10% of total time instead of 90% of total time.

The old code used to query FontConfig with the
char and locale for every time Blink needed
a fallback font for a character.

The new code only queries FontConfig once for each
locale, saves the resulting FcFontSet.  When we need
to know the correct font for a char, we walk the
fonts in the set asking each if they have a glyph for
that character.

This design is based on a discussion with Behdad.

The existing logic had a bunch of code to work around
bugs where FontConfig would return invalid fonts.
To avoid walking invalid fonts for each lookup
we create a Vector of FontCache objects at CachedFontSet
creation time and only walk valid CachedFonts at
lookup time.

This change resulted in the "missing glyph" changing
for several tests.  I'm not yet sure if that's
a regression or progression.  The new missing glyph
is slightly larger than the old one in the effected tests.

BUG=266214
R=behdad@google.com

Review URL: https://codereview.chromium.org/21497002

git-svn-id: svn://svn.chromium.org/blink/trunk@155355 bbb929c8-8fbe-4397-9dbb-9b2b20218538