New Settings API

Based on discussions from last week and comments on the design doc,
this api begins to implement the following:

1. Adds a "Scope" variable to api, which tells the SettingsManager
   whether the setting can be stored globally (so that it is visible
   to all parts of the app), or per-camera, or per-module, or per-
   custom scope that the api user provides.
2. Separates keys and default values from SettingsManager,
   to make it easy to add new settings/defaults from third party
   modules.
3. Stores all settings as strings, to avoid upgrade errors, and
   handles casting to type requested.  Only String, Integer, and
   boolean are supported.
4. Opens SharedPreferences files on demand, depending on scope
   argument.
5. Creates a "DefaultsStore" to hold the defaults and possible
   values of a setting.  Then a user can request the default or
   possible values of a setting at any time.

Change-Id: I03e0e1dd0955c519f54112e89716014aa963a425
24 files changed