Introduce ability to use a message queue between components
Right now all components communicate synchronously via HTTP requests (it's node, so they're async calls but one service waits on another and the message fails to pass if the service goes down). We can (and should) be able to use a message queue to make this more reliable and decrease the risk of overwhelming the workers. This will also enable us to restart the container manager service without the risk of orphaning a builds half way through (and while we're at it we should store what containers need to be stopped and when so that we can still shut down old containers after a restart).
My approach is to create a PublishEvent interface that can fire off post requests, issue events through an EventEmitter (for in process event transmission especially useful for mocking in unit tests), and enable us to use a message queue like kafka.