[bug 1006493] Index contribution data in ES.

New mapping types for models that map to contributions:
* Answer (Support Forum contribution)
* Revision (KB and L10n contributions)
* Reply (Army of Awesome contribution)

Most of this code is the standard way we have been creating mapping types, extracting the information, etc. These "documents" in ES will be used for metrics purposes only and will be in their own index far from our mission critical stuff.

I had to tweak the infrastructure that verifies mappings so that it only checks for collisions in mappings that share an index. Other than that, this was pretty straightforward.

Did I do this right? Is there a better way? Did I name things OK?

r?

PS. I have another branch that uses this to create the contribution heatmaps on user profile pages, but I broke that out because it was going to be too much to chew in one pull request.