Add a couple components to help with async rendering

It looks like wrapper components might be a better way to manage promises and events than mixins, since a component encapsulates its own lifecycle and state.

**ChangeListener**, given a target emitter object, will re-render whenever a (configurable) change event is emitted. Ran into an issue with children not re-rendering, which is solved by passing in a `handler` function, which is annoying, but not the end of the world.

**PromiseRenderer**, given a promise, a `then` function, and a `catch` function, waits for the promise to resolve and renders with the results of the appropriate function. This is less annoying, since it'll force us to organize different render methods a bit more.

I extracted these from another branch I'm working on, so there are no examples here. Here they are in use: https://github.com/zooniverse/Panoptes-Front-End/blob/95789ca0172d59fe472135d8d49e8f8a082358e9/app/pages/edit-project.cjsx This is a decent example of how each render method is responsible for one thing, and the component's state is properly used for internal state-y things instead of a place to hold references to promised values.

Thoughts, @parrish, @aweiksnar?