First part improvements of PR #2420

First part improvements of PR #2420:
Mainly includes:
 - expiration cleanup improvements
 - map store & expiration/eviction relations
 - adding an upper bound to WBQs
ok, I found two issues when working on this:

- a corner case when TTL < 1ms: #2659 
- the MapStore API doesn't have a concept of TTL - having MapStore enabled renders TTL useless. See this

 public void testTTLWhenMapStoreConfigured() {
        String mapName = randomMapName();
        MapStoreConfig mapStoreConfig = new MapStoreConfig()
                .setImplementation(new SimpleMapStore<String, String>());

        Config config = new Config()
                .addMapConfig(new MapConfig(mapName).setMapStoreConfig(mapStoreConfig));

        HazelcastInstance instance = createHazelcastInstance(config);
        final IMap<String, String> map = instance.getMap(mapName);
        map.put("foo", "bar", 1, TimeUnit.MILLISECONDS);

        assertTrueEventually(new AssertTask() {
            @Override
            public void run() throws Exception {
                assertNull(map.get("foo"));
            }
        });
    }

One could argue it's a feature, but I find the behaviour to be surprising.