Updates to client to address edge cases with client check-in

This change addresses two edge cases:

1. If the registry goes down, or is overloaded, the client sees that request as pending indefinitely and will never send a new request once the registry has recovered. To address this the client now has a configurable ATTEMPTS_BEFORE_RETRY, which dictates how many times it will skip making a new request (i.e. wait for the pending request to receive a response), before it sends a new request.

2. If a client is unable to check-in for a period of time, but then resumes checking in with the same registration and meta-data, the client will ignore the new online events received from the registry because the meta-data hasn't changed. To address this, the entry in the client's local registration store is deleted when an 'offline' event occurs.