Add KeyEvent to handle key exchange
Less duplication and prevent segfault
Instantiate new IrcUser for key exchange

A query with a user that does not share a channel with us means there is
no IrcUser for the target. Instantiate a new one so that the cipher can
be stored properly.