Fix V8 ICU initialization

Normally, V8 is linked statically into the executable, so the call to
'icu_util::Initialize' is sufficient to initialize the common ICU data.
However, since we have the option to build V8 as a separate shared library, we
need to initialize the ICU data separately in the V8 dll.

As part of this change, we will also introduce a new variable to control
whether we build V8 as a shared library or not.  Previously, this was hardcoded
by overriding 'component=shared_library' for V8.
Fix a bunch of autocorrect issues

This commit fixes a bunch of autocorrect issues on the Blink side:

* Make undo work properly for autocorrect:
  - Use SpellingCorrectionCommand instead of manually replacing frame contents.
  - Set the selection before applying SpellingCorrectionCommand to include the
    space after the misspelled word.
  - Perform autocorrect after finishing applying the typing command.
* Only perform autocorrect when inserting text (i.e. don't autocorrect when
  we're backspacing and just happen to be at a word boundary).
* Fix the range where spellcheck is done to be only a single word (previously,
  it would check two words when on a boundary).
Add autocorrect word map

Upstream chromium performs autocorrect by swapping adjacent characters in a
misspelled word until a correct word is found.  This handles the common case
where the user types a word quickly with some characters in the wrong order,
however, it doesn't handle corrections like "ambigous"->"ambiguous".

This commit adds a way for applications to provide a mapping of "bad words" to
"good words", via the Profile interface.

As part of this change, also refactor the way custom words are specified.  Note
that this is a change in the public interface for SpellCheckConfig.  Instead of
specifying the custom words in SpellCheckConfig, applications should now use
the 'addCustomWords' and 'removeCustomWords' methods in Profile.  This makes it
possible for applications to adjust these dynamic lists without having to
maintain the master list.

Internally, we no longer use user prefs for storing custom words.  They are now
stored (along with autocorrect word mappings) in a new SpellcheckData structure
that is attached to a BrowserContextImpl.
Change autocorrect flag from boolean to enumeration

Instead of just having a boolean flag to say whether autocorrect is on or off,
this commit makes the autocorrect setting an enumeration of flags.  This allows
us to specify different types of autocorrect behaviors that can be enabled or
disabled independently.  For now, we just have the following two behaviors:

* AUTOCORRECT_WORD_MAP (added in the previous commit)
* AUTOCORRECT_SWAP_ADJACENT_CHARS (default upstream behavior)

Previously, if the Profile contained autocorrect word mappings, the upstream
behavior of swapping adjacent characters was disabled.  This commit makes it
possible for applications to choose which behaviors they want.

Note that this is a change to the public interface for SpellCheckConfig.
Merge remote-tracking branch 'origin/bugfix/autocorrect/30.0.1599.101' into release/candidate
Merge remote-tracking branch 'origin/feature/blpwtk2/30.0.1599.101' into release/candidate

Conflicts:
	chromium/src/chrome/browser/spellchecker/spellcheck_service.cc