Fixes expiration time changes after TTL updates

closes https://github.com/hazelcast/hazelcast/issues/3923

- `ExpirationTimeTest` proves this fix.
- Includes various refactorings.