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.
nit: it you use `this.sinon.{spy|stub|useFakeTimers}` they get automagically `.resore()'ed` on teardown.