Sort of improve event handling. [branch status: broken]
Merge XMLProtocol and XMLWriter, make Node use ET elements.
Refactor large parts of the XMPP library. [branch status: ok]

  1. Move random string generation and BASE64 into a separate file.
  2. Remove unused `xmlns:xml`.
  3. Assume there's always an `error` subnode in stanzas with `type="error"`.
  4. Check for availability of `bind` and `session` before using them.
  5. Dispatch messages through `message-<bare>` first, then `message-<full>`, `message-<type>-<bare>`, and, finally, `message-<type>-<full>`.
  6. Dispatch iq responses by ID (`response-<id>`) instead of using a general `response` event.
  7. Create a unified interface for SASL mechanisms. Each mechanism is handled by a function which yields string responses and receives string challenges in return. BASE64 encoding is handled automatically.