Bug 982663: collect and report app usage data

This patch does not have tests yet, and is still missing a couple of features, but it has working code and is ready for feedback and preliminary review.
Semi-globals above this line should all be properties (all caps) of the `UsageData.prototype`. Please move them there.