S68340 tree grid printer

Please review only, DO NOT MERGE.

This also includes an independent commit to update sinon.js from 1.6.0 to 1.10.2. We use a feature of 1.10.2 in an app-catalog test.

Related appsdk PR: https://github.com/RallySoftware/appsdk/pull/530
Related alm PR: https://github.com/RallySoftware/alm/pull/443
The isEmpty check, or this.allRecords? We're using this.allRecords to keep track of the top-level records that will eventually be passed to the TreeGridPrinter. onStoreLoad will get called with other records going forward, when we expand parents the children will come in as records. this.allrecords could alternatively be initialized in initComponent.