sandbox.start returns Promise instead of `this`

`this.sandbox.start` will now return a Promise object, which is resolved when all the components are started. This is more useful than having `this.sandbox.start` chainable because components are started asynchronously. Most importantly this will avoid race conditions.