good point. With the new implementation, the client is marked offline whenever it goes offline.

The ```sync()``` is based on the list of users. If a userId is in the ```_users``` map, it means the user is online. So if B connects afterwards and do a ```sync```, he will see 'A' as online but with no client connected.

I did this so that events are consistent with what's in the redis store.

Based on my understanding, ```fullRead``` fills 2 purposes:
1) potentially cleanup local memory data by regularly looking at redis which is the authoritative data. However, PresenceManager instance have a medium life span which should cause potentially stale data to automatically be junked.
2) when a client arrives on a new instance and subscribes to a presence channel, it needs to catch up with the current presence state by reading the authoritative data.