More queue-like, less event-like.

We use one /slave_ready event for listening to slaves becoming
ready. Along with the slave id we transmit the faye client id, which we
will later use for listening to heartbeats and know when a slave dies.

Using one event lets us not have to manage as many subscriptions, and it
better suits the upcoming message queue semantics for knowing when a
slave dies.
Using a hash map to store all slaves, for perf.

We get O(1) instead of O(n).
Adding heartbeats and timeouts for slaves.

I haven't found a good way to automate the testing of this with
phantom.js. We should probably create some sort of checklist for manual
testing, and add some logging, so that we can manually verify with
certainty that all code paths are followed.
Adding checklist for manual tests.