Refactor models so they are defined explicitly

Rather than defining the models in a for loop we explicitly define each
model in the models.js file. This adds a couple of extra lines of code,
but makes it much easier to override specific methods of individual
models without using ugly conditionals.
Remove collections.js in favour of using models directly

This removes the confusing separation between collections.js and
models.js. All the functionality is now provided by models.js which is
also more explicit in defining models.
Make toElasticsearch function async

This allows us to do extra queries before the document gets indexed into
elasticsearch. We can use this to get the person and organization
information for a membership before it is indexed.
Index organization/person/post related to membership

Override the toElasticsearch method so that we can index a memberships
related models, which in turn allows the user to query against the
related objects through the search API.
Index coalition-style membership relations

This allows you to query against the 'member' property where an
organization is a member of another organization in elasticsearch.
Add reIndex method to models

This allows us to call the 'reIndex' method from places other than the
model's post save callback.
Reindex membership after related objects change

When people, organizations or posts change, any memberships that they
are related to will also need to be reindexed so they have the latest
data.
Merge pull request #46 from mysociety/membership-relations-elasticsearch

Membership relations elasticsearch