def unschedule(obj)
      if @occurrences.has_key? obj
        last_priority = @occurrences.min_priority
        obj, time = @occurrences.delete obj
        if parent && @occurrences.min_priority != last_priority
          if @occurrences.min_priority
            parent.schedule([:clock, self], unscale_time(@occurrences.min_priority))
          else
            parent.unschedule([:clock, self])
          end
        end
        unscale_time(time)
      else
        relative_time = @children.first_non_nil { |clock| clock.unschedule(obj) }
        unscale_relative_time(relative_time) if relative_time
      end
    end
def unschedule(obj)
      if @occurrences.has_key? obj
        last_priority = @occurrences.min_priority
        obj, time = @occurrences.delete obj
        if parent && @occurrences.min_priority != last_priority
          if @occurrences.min_priority
            parent.schedule([:clock, self], unscale_time(@occurrences.min_priority))
          else
            parent.unschedule([:clock, self])
          end
        end
        unscale_time(time)
      else
        relative_time = @children.first_non_nil { |clock| clock.unschedule(obj) }
        unscale_relative_time(relative_time) if relative_time
      end
    end
dequeues the earliest occurrence from this clock or any child clocks.
 returns nil if it wasn't there, or its relative_time otherwise