Extracts a handler and handler's arguments that can be provided 
        as list or dictionary. If arguments are provided as list, they are 
        considered to have this sequence: (handler, memoize, timeout)                
        Examples:
            event += handler
            event += (handler, True, 1.5)
            event += {'handler':handler, 'memoize':True, 'timeout':1.5}

def _extract(self, item):
        """ Extracts a handler and handler's arguments that can be provided 
        as list or dictionary. If arguments are provided as list, they are 
        considered to have this sequence: (handler, memoize, timeout)                
        Examples:
            event += handler
            event += (handler, True, 1.5)
            event += {'handler':handler, 'memoize':True, 'timeout':1.5}
        """
        if not item:
            raise ValueError('Invalid arguments')

        handler = None
        memoize = False
        timeout = 0

        if not isinstance(item, (list, tuple, dict)):
            handler = item
        elif isinstance(item, (list, tuple)):
            if len(item) == 3:
                handler, memoize, timeout = item
            elif len(item) == 2:
                handler, memoize = item
            elif len(item) == 1:
                handler = item
        elif isinstance(item, dict):
            handler = item.get('handler')
            memoize = item.get('memoize', False)
            timeout = item.get('timeout', 0)
        return handler, bool(memoize), float(timeout)