presence sentry to watch servers

- posts keep alive periodically
- emits events when server goes down
- loads full state of servers initially
PresenceStore for tracking all clients, users

- Emits user/client added/removed events based on state change
- iteratable option to retrieve full user/client list
- options to keep empty users without clients if needed
- also keeps a userType registry
PresenceManager using store/sentry

- Options to add/remove/disconnect clients
- Makes local servers equivalent to remote servers
- All events are generated in two steps:
    - Publishes all actions to redis first.
    - All messages are stamped with sentry-id for validation
    - Reads redis reponse, validate them using sentry system, add/remove from store
    - emits online/offline events based on store events
    - Redis responses make all events correctly ordered
- User expiry when implicitly offline
    - Always sets up user expiry timer on implicit offline
    - The expiry function will check if user is empty before removal
    - A disconnect (cid1.uid1) and a subsequent explicit offline
      (cid2.uid1) does not send user_offline until user is expired.
- Offline events are qualified as explicit or not
- Limited backward compatibilty to old server messages
    - message.at is set 1 hour in the future to prevent expiry
    - for messages without a sentry, a fake sentry is published which is
      kept alive by further autupublish messages.
- Cleans up stale/old redis entries:
    There are two possible stale entries:
    1. entries with dead sentries
    2. entries with message.at expired
    Makes sure we don't publish updates for them,
    Cleans up locally and updates clients if needed.
    All servers will eventually become consistent.
Presence readme describes design in detail
Presence resource: Use new presence manager

- Use new presence manager/store/sentry system
- Remove Local/Remote manager usages
- Garbage collect set('offline') as first operation:
    - The resource is immediately destroyed, since it was never
      subscribed to.
- Streamline all log statements
Server/Resource changes for new presence/logging

- Streamline all log statements
- Add .destroy() to resource
- Replace heartbeat timers with sentry.start()
- Call resource.destroy() before removing them.
    Presence manager destroy is required:
    - Removes sentry listener
    - Makes any existing redis response listners no-op,
    this prevents pending redis reflections from blowing up
    - Removes user expiry timers active
Export PresenceManager instead of RemoteManager
Update presence apis to use PresenceManager

- Replace RemoteManager with PresenceManager
- Streamline log statements
remove old presence files

These are no longer used
- Local Manager
- Remote Manager
- ArraySet
- ArrayMap
- Heartbeat
Streamline logging for status, message, types
Add/update tests for new presence

- All tests are shorter because userExpiry, sentry validity, etc
are shorter when testing
- New comprehensive remote message tests for presence
- Make test logging more nicer and colorful
- reduce verbosity of travis tests
add a changelog
Merge pull request #85 from zendesk/vanchi/better_presence

Refactor presence