Vanchi/better presence

* Creates a Presence Sentry (one per server instance) which can send/listen to server keep-alive and notify if a server is down.
* Eliminates need for Local/Remote managers
* Disconnect queueing is a simple timeout

/cc @zendesk/zendesk-radar


### Steps to merge
 - [ ] :+1: of the team
 - [x] Fix/rewrite failing tests
 - [x] Create multiple server tests (better remote tests)

### References
 - Jira link: https://zendesk.atlassian.net/browse/RADAR-306

### Risks
 - Presence does not work as expected.
Sure I can do that. Can you explain the danger?
On Jul 15, 2014 9:25 AM, "Sam Shull" <notifications@github.com> wrote:

> In core/lib/resources/presence/sentry.js:
>
> > +
> > +  Persistence.persistHash(Sentry.channel, this.name, message);
> > +  Persistence.publish(Sentry.channel, message);
> > +};
> > +
> > +Sentry.prototype.start = function(callback) {
> > +  var sentries = this.sentries;
> > +  var self = this;
> > +  if(this.timer) {
> > +    return;
> > +  }
> > +  logging.info('#presence - #sentry - starting', this.name);
> > +  this._listen();
> > +  this.publishKeepAlive();
> > +  this.loadAll(callback);
> > +  this.timer = setInterval(this._run.bind(this), Math.floor(Sentry.expiry/2));
>
> Can you replace this by placing a setTimeout at the bottom of
> Sentry.prototype._run that just reinvokes the timer each time it runs.
> setInterval can be very dangerous.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/zendesk/radar/pull/85/files#r14946223>.
>