Add support async scripts

/to @bajtos 
/cc @ritch 

The PR adds two enhancements for boot:

Allow boot scripts to be executed asynchronously
> module.exports = function(app, callback) {...}

If one of these asserts fails, the error message will be very unhelpful.

Solution A:

```js
expect(process.bootFlags.fooLoaded, 'fooLoaded').to.equal(true);
// etc.
```

Solution B:

```js
expect(process.bootFlags).to.eql({ 
  fooLoaded: true, 
  barLoaded: true, 
  // barProcessed is not set, will be set in the next tick
  barSyncLoaded: true
});
```

The latter provides most context, as the assert library has all four properties available to print them in the error message.