Collect and dispatch exit methods

Collect exit methods when traversing the matched route and call them on the next matching route.
This is useful for cleaning up previous state like setIntervals.

This is how you tell Aviator about exit methods:
```javascript
Aviator.setRoutes({
  '/campaigns': {
    target: CampaignsTarget,
    '/': 'index',
    '/add': { method: 'add', exit: 'addExit' }
  }
});
```

The exit functions will be called in the reverse order. Deepest match first.

@barnabyc @flahertyb