- Add support for SMTP AUTH CRAM-MD5

- Convert all proto modules to use timedout reads.

- Add patterns to the remotes file, to allow messages to be delivered to
  different remotes based on the sender or recipient addresses

- Remove "adminaddr" facility from -queue, and add a more general
  destination address rewriting facility to -inject:
  - Read a list containing "PATTERN:ADDRESS" lines.
  - PATTERN can be a literal "user@FQDN" or just "user", in which case
    it must be matched exactly (before qualification).
  - PATTERN can be "@FQDN" which matches any user.

- For version 1.5:
  - New program: nullmailer-bounce
    reads a queued message on stdin, writes a bounce on stdout
  - New program: nullmailer-ddn
    reads a queued message on stdin, writes a DDN on stdout
  - Generate bounces for permanently failed messages.
  - Generate DDNs for messages older than a configurable time.
  - Generate bounces for temporarily failing messages after a
    configurable time.
  - Queue bounce from <> to sender
  - Queue double bounce from <#@[]> to doublebounceto or adminaddr
  - Optionally move bounces to a seperate directory
  - Move triple bounces to a seperate directory

- For version 2: three-state queueing
  - Queue message partially (tmp -> holding)
  - Send to smarthost immediately
  - Remove from holding if sending succeeds
  - Complete queueing (holding -> queue) if sending is deferred
  - Return with an error if sending fails (permanently)
  - Move all from holding -> queue on startup of nullmailer-send
