Working on cleaning up the renderers again when the dataProvider is set. At the dataProvider setter time, we clean up the old ones. At commitProperties() time we create the new ones (in the virtual case, this is done at updateDisplayList() time).
I had to add some cleanup around a dataProvider reset or refresh because we need to do this cleanup there as well. However, we can't rely on the dataProvider to loop through the item renderers because it may have changed, so we rely on our own data structure, indexToRenderers. This makes finding the actual item associated with the renderer a little hard, but for most use-cases it should be fine.