- 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.

- Generate DDNs for messages older than a configurable time.

- For version 3: 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
