Restructured pikelet init, split jabber pikelet in two

It should now be possible to run more than one
component per pikelet, and to catch exceptions in
each one without interrupting other parts of the
running application.

Still TODO:
* restore the keepalive timer (axed while debugging)
* some pending tests
* test running code more widely, to check that
  these structural changes haven't broken anything