SYNOPSIS
        int remove_call_out(string fun);
        int remove_call_out(closure fun);

BESCHREIBUNG:
        Entfernt den naechsten laufenden call_out() auf die Funktion <fun>
        im aktuellen Objekt bzw. den naechsten laufenden call_out() auf die
        Closure <fun>. Die verbleibende Zeit wird zurueckgeliefert.

        Wenn es keine laufenden call_out()s auf gibt, wird -1 zurueck
        geliefert.

BEISPIEL
        Um alle call_out()s auf MeineFunktion() zu entfernen:

        while(remove_call_out("MeineFunktion") != -1);      /* wiederhole */

BUGS
        Das Entfernen von call_out()s auf Closures funktioniert nur, wenn der
        exakt gleiche Wert fuer die Closure verwendet wird.

        Das funktioniert:
            closure cl = symbol_function("main", obj);
            call_out(cl, 2);
            remove_call_out(cl);

        Das funktioniert nicht:
            call_out(symbol_function("main", obj), 2);
            remove_call_out(symbol_function("main", obj));

SIEHE AUCH
        call_out(E), call_out_info(E), find_call_out(E)
