=== To Do

Next:
  * Explore ft-cache-1.tcp more, packets 310/312 in ethereal.

NetPacket::IP:
  * Ignores IP length, so does not strip ethernet padding (see EventLoop:22)

TCPSession.pm:
  * Handle seq numbers wrapping to zero at MAX_INT
  * Handle overlapping packets (if this happens ?)
  * Handle any nasty cases related to future-packets triggering flipping etc.
  * Handle TIME_WAIT; after sesh is closed, handle late stray packets for it
  * process_packet will fail to return 'ESTABLISHED_SESSION' if the session is
     established via a stored from-the-future packet ...

Dispatcher.pm:
  * Nested emit()s may be confusing:
      1. TCP.pm accepts tcp_packet
      2. It processes it, and emits tcp_session_end
      3. Dispatcher passes tcp_session_end to (say) HTTP.pm
      4. TCP.pm finishes with tcp_packet
      5. Dispatcher then emits tcp_packet to (say) HTTP.pm
    Thus HTTP.pm gets tcp_packet *after* any events that the packet triggered
