Ensure callback is called whenever a value is discarded

In my use-case, the value being stored in cache cannot be garbage collected. My callback is responsible for cleaning it up. There are certain conditions that the object reference is removed from cache, but the callback is never called.

This pull requests addresses that by adding some additional calls to callback. The unit tests still pass. I supplied new unit tests for the new functionality.