Yak shave for interaction_data.  Ensure timestamp, lang, etc are always sent in interaction data.

* Removed the .interactionData namespace from storage.js, created our first model - shared/models/interaction_data.js
* Simplified how data is stored into interaction_data, created current and staged sub-namespaces
* Added stageCurrent and publishStaged functions.
* in shared/modules/interaction_data.js, simplified calls to model.
* Tried to make the xhr mock make more sense and provide facilities usable for peeking at last XHR request data.

issue #1597
blur timestamp; remove local_timestamp
resources/static/lib/underscore-min.js: upgrade from 1.1.7 to 1.3.3

Specifically to get _.escape()
dialog.js: improved parameter-escaping
dialog.js: oops, 'var'ify that accidental global
Removing a console.log message, updating comments for a test for clarity.
Make the "is this your computer" screen keyboard navigable.

* For the buttons, use id's instead of classes.
* Focus the "yes" button when the screen is shown.

issue #1582
Instead of showing an error message, show a tooltip when the user types a bad password in the add_email_address and verify_email_address screens.

issue #1557
Merge pull request #1612 from mozilla/issue_1597_interaction_data

Issue 1597 interaction data
Merge branch 'dev' into blur_interaction_data
set default port for local kpiggybank server
publish only whitelisted interaction data values
dialog.js: pass requiredEmail (unchecked) through to params
whoops.  Wrong 'backend'.  Reverting
Replacing Array .forEach method, which is unsupported in IE8
db.ping() must use the same application level query timing and reconnection logic as other query types - issue #1608
Merge pull request #1633 from mozilla/issue1608

db.ping() must use the same application level query timing and reconnect...
Move requiredEmail validation from state.js to dialog.js . Tests fail.

Since validation is done earlier, invalid addresses are reported as with
renderError() instead of startAction("doError"). So the tests which
watch for doError are now failing (the frontend tests named
"resources/state: start with invalid requiredEmail - print error screen"
and "resources/state: start with empty requiredEmail - prints error
screen". I don't know how to make them watch for renderError() instead.

One upside of this patch is that @stomlinson told me the three-argument
to startAction("doError"..) in state.js was a bug, as it only accepts
two real arguments. Removing it is even easier than fixing it.
Move the requiredEmail checks from resources/state.js to controllers/dialog.js. Add more tests.

* Add the startExternalDependencies option when initializing the dialog controller, if set to false, no external dependencies are loaded.  Used for testing.
* Add a new test to check for script containing emails.
* Add unit tests for tosURL and privacyURL.
* Add a testHelpers.testErrorNotVisible
* Removed the actions.js->doError and its tests, it is no longer used.
Fix the user being asked 4 times for a password when adding a secondary email to a primary account and verifying email ownership in a new browser.

* When "email_staged" is triggered, trigger it with the password.
* Rename helpers.addSecondaryEmailWithPassword to helpers.addSecondaryEmail
* Add unit tests for helpers.addSecondaryEmail
* Yak shave the unit tests to clean them up so that they are easier to follow.

issue #1555