sender renamed to key. efficiently support a lot of handlers for same
event, but with different key. support strong and weak key