Distributed: ClientZone client + cleanup on leave

Technical Description:
- ClientZones are now implemented on the client. A 'general' default
zone with id of -1 is used for all non-zoned DistributedObjects.
- Resolved an issue with DistributedObjects with the same Id overwriting
each other.
- If a client is already registered to a zone, the join request will now
be ignored.
- Set default zone id to -1
- Removed unneeded id paramater in DistributedObject#getZoneId
- When a client leaves a client zone, all the DistributedObjects within
that zone are destroyed locally now.