@Override
    public void putAll(final Map<? extends String, ? extends String> m) {
        for (final Entry<? extends String, ? extends String> entry : m.entrySet()) {
            put(entry.getKey(), entry.getValue());
        }
    }
DOESN'T adhere to the contract of {@link Map#keySet()}, so any changes
to the returned {@link Set} will NOT affect this map.
stroom-meta/stroom-meta-api/src/main/java/stroom/meta/api/CIStringHashMap.java