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.
How? removeClient should return if it has nothing to do: which is !userId or !this.map[userId] || !this.map[userId]\[clientId\] (which will never happen because userId will be nil in the case). I can simplify that check to if(!userId).

 Either way if there is a memory leak, the store's internal state is in a mess and will cause more problems. (But the internal state of the store is always kept consistent).