Fix a bug where whowas tries to add a user with no nick

If a user times out on registering a nick (_timeoutRegistration),
then whoWas.addUserToWhowas gets called but user.nick is None.
This causes an exception like so:

ERROR:twisted:Unhandled Error
Traceback (most recent call last):
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/application/app.py", line 392, in startReactor
    self.config, oldstdout, oldstderr, self.profiler, reactor)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/application/app.py", line 313, in runReactorWithLogging
    reactor.run()
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/base.py", line 1192, in run
    self.mainLoop()
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/base.py", line 1201, in mainLoop
    self.runUntilCurrent()
--- <exception caught here> ---
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/base.py", line 824, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/var/env/txircd/txircd/txircd/user.py", line 203, in _timeoutRegistration
    self.disconnect("Registration timeout")
  File "/var/env/txircd/txircd/txircd/user.py", line 193, in disconnect
    self.ircd.runActionStandard("quit", self, reason, users=self)
  File "/var/env/txircd/txircd/txircd/ircd.py", line 486, in runActionStandard
    action[0](*params, **kw)
  File "/var/env/txircd/txircd/txircd/modules/rfc/cmd_whowas.py", line 40, in addUserToWhowas
    lowerNick = ircLower(user.nick)
  File "/var/env/txircd/txircd/txircd/utils.py", line 16, in ircLower
    return string.lower().replace("[", "{").replace("]", "}").replace("\\", "|")
exceptions.AttributeError: 'NoneType' object has no attribute 'lower'
fix an issue where twisted's code raises a ValueError on bad data

A malformed user message can result in this:

ERROR:twisted:Unhandled Error
Traceback (most recent call last):
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/python/log.py", line 88, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/python/log.py", line 73, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
--- <exception caught here> ---
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 614, in _doReadOrWrite
    why = selectable.doRead()
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/tcp.py", line 215, in doRead
    return self._dataReceived(data)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/internet/tcp.py", line 221, in _dataReceived
    rval = self.protocol.dataReceived(data)
  File "/var/env/txircd/txircd/txircd/user.py", line 67, in dataReceived
    irc.IRC.dataReceived(self, data)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/words/protocols/irc.py", line 305, in dataReceived
    prefix, command, params = parsemsg(line)
  File "/var/env/txircd/lib/python2.7/site-packages/twisted/words/protocols/irc.py", line 83, in parsemsg
    prefix, s = s[1:].split(' ', 1)
exceptions.ValueError: need more than 1 value to unpack

We have no choice but to catch errors out of dataReceived() and treat them as connection errors.
Merge pull request #7 from ekimekim/fixes

Fix a bug where whowas tries to add a user with no nick
Make ircd.storage keep a cache and write back every 5 sec

This prevents performance problems due to pickling and unpickling a thing thousands of times