Fix for issues #3931 and #3932

Created a new branch to clean up previous pull request. 
I would argue that it will work as is, since the exact same instance is put in the map and in the list. The remove gets the instance from the map and uses that to do the remove. The'll have the same objectId and the equals on Object will work.

````
  public void addInterceptor(String id, MapInterceptor interceptor) {
        removeInterceptor(id);
        interceptorMap.put(id, interceptor);
        interceptors.add(interceptor);
    }
```

```
    public void removeInterceptor(String id)  {
        MapInterceptor interceptor = interceptorMap.remove(id);
        interceptors.remove(interceptor);
    }
```