wip: Split the boot execution into phases

For now this is an example usage of phases... This will allow you to do neat stuff like this:

```js
app.phase('boot:models').after(function(cb) {
  // models have now been defined
  console.log(app.models());
  cb();
});
```

or in the middleware phases....

```js
app.phase('middleware:authentication').after(function(cb) {
  // the user making the request
  this.req.accessToken.user(function(err, user) {
    console.log(user.email);
    cb();
  });
});
```

**Before We Can Merge**

- [ ] tests
- [ ] loopback-phase released as 1.0.0
- [ ] loopback's `app.phase()` support
- [ ] loopback's `app.phases` support

/to @bajtos please review
/cc @raymondfeng 
It shouldn't have its own phase... we should run it on `boot:complete`.