fix memory leak around chart listeners

Found by Lsan.

The following pattern leaks memory:

boost::ptr_container x;
x.release().release();

Change-Id: Iaf52e4f2d6a96266fc6afd65ef8027d80c97a08b
diff --git a/sc/source/core/tool/chartlis.cxx b/sc/source/core/tool/chartlis.cxx
index 1fa991a..be56325 100644
--- a/sc/source/core/tool/chartlis.cxx
+++ b/sc/source/core/tool/chartlis.cxx
@@ -519,39 +519,32 @@ public:

void ScChartListenerCollection::FreeUnused()
{
    std::vector<ScChartListener*> aUsed, aUnused;
    ListenersType aUsed, aUnused;

    // First, filter each listener into 'used' and 'unused' categories.
    {
        ListenersType::iterator it = maListeners.begin(), itEnd = maListeners.end();
        for (; it != itEnd; ++it)
        while(!maListeners.empty())
        {
            ScChartListener* p = it->second;
            ScChartListener* p = maListeners.begin()->second;
            if (p->IsUno())
            {
                // We don't delete UNO charts; they are to be deleted separately via FreeUno().
                aUsed.push_back(p);
                aUsed.transfer(maListeners.begin(), maListeners);
                continue;
            }

            if (p->IsUsed())
            {
                p->SetUsed(false);
                aUsed.push_back(p);
                aUsed.transfer(maListeners.begin(), maListeners);
            }
            else
                aUnused.push_back(p);
                aUnused.transfer(maListeners.begin(), maListeners);

        }
    }

    // Release all pointers currently managed by the ptr_map container.
    maListeners.release().release();

    // Re-insert the listeners we need to keep.
    std::for_each(aUsed.begin(), aUsed.end(), InsertChartListener(maListeners));

    // Now, delete the ones no longer needed.
    std::for_each(aUnused.begin(), aUnused.end(), boost::checked_deleter<ScChartListener>());
    std::swap(aUsed, maListeners);
}

void ScChartListenerCollection::FreeUno( const uno::Reference< chart::XChartDataChangeEventListener >& rListener,