Refactor Cipher related things.

Instead of using a hash with set keys, set the key on the relevant
  CoreIrc{User,Channel}'s cipher member.
Let the cipher clear its own key (with appropriate checks elsewhere)
Instantiate a new IrcUser when necessary (a query with someone who does
  not share any channels with us means there is no IrcUser for the target
  until he says something)
Add support for DH1080 key exchange

Adds a KeyEvent and handlers, as well as a command (keyx) to initiate
and act upon a key exchange.