[RFC] Put data to ElasticSearch

This huge chunk of code puts data to ElasticSearch.

There's lots of copy-paste that could be re-factored out later in RemoteDataStore. (Which we should totally fix or note for more marks!) Not sure how much I can minimize the other stuff that looks copy-pasted but isn't exactly similar.

Custom serializers and deserializers provide more control, and in the case of deserializers, are necessary to
populate existing objects with data. Please note that these are incomplete.

Also, exception handling needs to be altered such that failure can be reported to the DataManager.

See http://cmput301.softwareprocess.es:8080/cmput301f14t14/_search for some sample data that was put
with this code.

Data cannot yet be fetched from RemoteDataStore because of incomplete deserializers and inability to get local data only from DataManager (to get existing objects).
(@RyanKusters, can you add a `getLocalDataStore()` method to DM? It's messy but it's easier for everyone.)

**Do not push until Ryan's existing DM pull request goes through. I want to go through this and fix any issues that result from any interface changes.**