Added basic plugin and event system.

### Plugin System

While this works, it's just an idea.

##### What we need to think about
* How to inject views using plugins (Maybe have pre-defined hook points throughout the app which can be emitted to using the plugin `app.events.emit('view:header', templateString)`)