keyDetacher = function(lcat, ltype, host) {
            var handles = lcat[ltype], ce, i;
            if (handles) {
                for (i = handles.length - 1; i >= 0; --i) {
                    ce = handles[i].evt;
                    if (ce.host === host || ce.el === host) {
                        handles[i].detach();
                    }
                }
            }
        }
Detach one or more listeners the from the specified event
@method detach
@param type {string|Object}   Either the handle to the subscriber or the
                       type of event.  If the type
                       is not specified, it will attempt to remove
                       the listener from all hosted events.
@param fn   {Function} The subscribed function to unsubscribe, if not
                         supplied, all subscribers will be removed.
@param context  {Object}   The custom object passed to subscribe.  This is
                       optional, but if supplied will be used to
                       disambiguate multiple listeners that are the same
                       (e.g., you subscribe many object using a function
                       that lives on the prototype)
@return {EventTarget} the host