Add support for experiments

This change refactors the options logic and adds support for
experiments: a new type of options which are not shown in the options
page (their usage will be similar to Chrome flags).

Experiments can be set from the
chrome-extension://{extension_id}/options/experiments.html page.

This code refactoring simplifies the options definition. Each option now
has a default value, and a context: the place where the option is set
(options, experiments, internal, deprecated).

Change-Id: I358ae07c832acae6b4536788c4dbe12a0e4730bf
diff --git a/docs/developers/add_feature.md b/docs/developers/add_feature.md
index 1f3fe0d..15053e4 100644
--- a/docs/developers/add_feature.md
+++ b/docs/developers/add_feature.md
@@ -9,8 +9,8 @@
 
 ### How to add the feature switch option
 1. First of all, think of a short codename for the feature.
-2. Modify the `//src/common/common.js` file by adding the default value for the
-option in the `defaultOptions` object.
+2. Modify the `//src/common/common.js` file by adding an entry in the
+`optionsPrototype` object.
     - All features should have the `false` value set as a default, so existing
     users have to explicitly enable the option after they receive the extension
     update. Otherwise, it might cause confusion, because users wouldn't know if
@@ -59,7 +59,7 @@
 codename appended by an underscore and a suffix
 (`{{feature_codename}}_{{suffix}}`).
 2. Modify the `//src/common/common.js` file by doing the following things:
-    1. Add a default value for the option in the `defaultOptions` object.
+    1. Add an entry for the option in the `optionsPrototype` object.
     2. Append the option's codename to the `specialOptions` object. This is so
     the option can be handled in a specific way when showing/saving it in the
     options page, or so it is handled outside of the options page.