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.