Bug 724632 - Detraitify symbiont.

This change implicitly depends on changes from following pull requests:

- #1733
- #1724

And if merged together with those changes it passes all symbiont tests

```sh
(addon-sdk)➜  ~CFX_ROOT  (detraitify-symbiont-no-deps) git merge detraitify-content-loader detraitify-bond
Trying simple merge with detraitify-content-loader
Trying simple merge with detraitify-bond
Merge made by the 'octopus' strategy.
 lib/sdk/content/loader.js |  79 +++++++++++++++++++++++++++++++++------------------
 lib/sdk/util/bond.js      |  36 +++++++++++++++++++++++
 test/test-bond.js         | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 256 insertions(+), 28 deletions(-)
 create mode 100644 lib/sdk/util/bond.js
 create mode 100644 test/test-bond.js
(addon-sdk)➜  ~CFX_ROOT  (detraitify-symbiont-no-deps) cfx test -b /Applications/FirefoxNightly.app -f symbiont -v
Warning: missing module: resource://gre/modules/Preferences.jsm
Warning: missing module: ../../framescript/FrameScriptManager.jsm
Warning: missing module: ../framescript/FrameScriptManager.jsm
Warning: missing module: resource://gre/modules/AddonManager.jsm
Using binary at '/Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin'.
Using profile at '/var/folders/0z/nztt5n4d4kg7b43dg9nv_3fc0000gp/T/tmp5gUXyp.mozrunner'.
Running tests on Firefox 36.0a1/Gecko 36.0a1 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under darwin/x86_64.
console.info: addon-sdk: executing 'addon-sdk/tests/test-content-symbiont.test:communication with worker global scope'
console.info: addon-sdk: pass: there is a window
console.info: addon-sdk: pass: Program gets message via onMessage.
console.info: addon-sdk: pass: Program gets message via onMessage2.
console.info: addon-sdk: executing 'addon-sdk/tests/test-content-symbiont.test:constructing symbiont && validating API'
console.info: addon-sdk: pass: There is one contentScriptFile, as specified in options.
console.info: addon-sdk: pass: There are two contentScripts, as specified in options.
console.info: addon-sdk: pass: There are two contentScripts, as specified in options.
console.info: addon-sdk: pass: There are two contentScripts, as specified in options.
console.info: addon-sdk: pass: contentScriptWhen is as specified in options.
console.info: addon-sdk: executing 'addon-sdk/tests/test-content-symbiont.test:content/content deprecation'
console.info: addon-sdk: pass: Should see three warnings
console.info: addon-sdk: pass: Loader from content/content is the exact same object as the one from content/loader
console.info: addon-sdk: pass: Symbiont from content/content is the exact same object as the one from deprecated/symbiont
console.info: addon-sdk: pass: Worker from content/content is the exact same object as the one from content/worker
console.info: addon-sdk: executing 'addon-sdk/tests/test-content-symbiont.test:document element present on 'start''
console.info: addon-sdk: pass: document element present on 'start'
console.info: addon-sdk: executing 'addon-sdk/tests/test-content-symbiont.test:pageWorker'
console.info: addon-sdk: pass: undefined
JavaScript error: resource://gre/modules/RemoteAddonsParent.jsm, line 387: TypeError: window is null

14 of 14 tests passed.
Total time: 6.250998 seconds
Program terminated successfully.
(addon-sdk)➜  ~CFX_ROOT  (detraitify-symbiont-no-deps)
```