Distributed services

Add support for distributed services. This is a pretty intrusive change and is going to require significant testing. I will be putting up a pull request in crits_services which has the other half of these changes.

As an example I have made the yara service optionally distributed. There are now some extra options to the yara service if you want to experiment. They are the "distribution_url" which you should point to the full AMQP url you want to use (I'm using 'amqp://guest:guest@amqp.local//' - and yes, the double slash is important). If you choose not to distributed yara you can just leave that blank and there will be no changes.

Currently, the configuration of exchanges, queues and routing keys must all be done ahead of time.

The other piece to the puzzle is something which reads the message off the queue, pulls the object out of CRITs via the API, scans it and puts the results back on the queue via the API. I have a working prototype of this but need to work with Murad a bit more to clean it up before I feel comfortable sharing it. For now, if you want to test I'd start with just ensuring messages are landing on the queue properly.

In doing this work I've also changed services by removing the notion of a "context". These existed from a time before we were using mongoengine and it made passing data into the service sane, but now with mongoengine we can just pass the object into the service. It makes the code much cleaner, but does require that all services be modified to handle an object. I've done it in crits_services for all the services there, but any custom services not in that tree will need to be modified.

I've also removed the notion of LocalAnalysisSource and LocalAnalysisDestination. They are never used anywhere and were just complicating the code. If someone is using these we can see about adding them back in, but given the neglect they have received I'm not sure anyone is actually using them.